Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 11, 2013 21:07:29

denveren0k
Зарегистрирован: 2012-09-06
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Перебор значений в QTreeWidget

Доброго времени суток уважаемые форумчане.
Очень нужна ваша помощь в работе с QTreeWidget.
с помощью модуля OpenOPC делаю перебор всех серверов OPC на локальной машине и вывожу их в QTreeWidget.

from PyQt4 import QtCore, QtGui
import OpenOPC
import sys
app = QtGui.QApplication(sys.argv)
QtGui.qApp = app
opc = OpenOPC.open_client("localhost")
items = opc.servers()
item = len(items)
def MY_FUN():
    print pointListBox.selectedItems()
pointListBox = QtGui.QTreeWidget()
header=QtGui.QTreeWidgetItem(["OPCServers - "+str(item)+" pcs"])
pointListBox.setHeaderItem(header)
for item in items:
    root = QtGui.QTreeWidgetItem(pointListBox, [item])
pointListBox.setIndentation(10)
QtCore.QObject.connect(pointListBox, QtCore.SIGNAL('itemClicked(QTreeWidgetItem *, int)'), MY_FUN);
pointListBox.show()
sys.exit(app.exec_())

Сервера отображаются обычным не раскрывающимся списком, а нужно сделать что бы они отображали раскрывающийся список на каждом сервере и была возможность выбрать определенный тег.
Т.е нужно отобразить сервера как раскрывающиеся списки и при нажатии на раскрытие какого нибудь сервера вызывалась функция где будет опрос этого сервера с дальнейшим выводом в этом же дереве.
Перегуглил все что можно, но ничего похожего не нашел.
Заранее спасибо за помощь.

Отредактировано denveren0k (Июнь 11, 2013 21:08:38)

Офлайн

#2 Июнь 11, 2013 22:48:24

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Перебор значений в QTreeWidget

Добавление дочерних элементов в QTreeWidget происходит путем создания нового итема и задания ему родителя.
Динамическую подгрузку можно повесить на itemExpanded. Но тут есть хитрость, по умолчанию плюсик (+) у элемента без детей не показывается, поэтому нужно поменять ChildIndicatorPolicy.
Пример:

# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys
 
app = QtGui.QApplication(sys.argv)
items = ['aa', 'bb', 'cc']
  
def on_item_expanded(item):
    # если уже загружено, выходим
    if item.childCount():
        return
    # тут может быть загрузка тэгов и т.п.
    for i in range(3):
        text = "sub item %s from %s" % (i, item.text(0))
        tree_item = QtGui.QTreeWidgetItem(item, [text])
 
treeWidget = QtGui.QTreeWidget()
for item in items:
    root = QtGui.QTreeWidgetItem(treeWidget, [item])
    # чтобы плюсик у дерева отображался даже если нет дочерних элементов
    root.setChildIndicatorPolicy(QtGui.QTreeWidgetItem.ShowIndicator)
 
treeWidget.itemExpanded.connect(on_item_expanded)
treeWidget.show()
sys.exit(app.exec_())
Кстати, вот в этом случае уже можно было бы обратить внимание на Model-View.

P.S.
http://python.su/forum/18/ раздел GUI

Отредактировано reclosedev (Июнь 11, 2013 22:49:30)

Офлайн

#3 Июнь 12, 2013 13:32:32

denveren0k
Зарегистрирован: 2012-09-06
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Перебор значений в QTreeWidget

Очередной раз огромное спасибо reclosedev

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version