Форум сайта python.su
Доброго времени суток уважаемые форумчане.
Очень нужна ваша помощь в работе с 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)
Офлайн
Добавление дочерних элементов в 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_())
Отредактировано reclosedev (Июнь 11, 2013 22:49:30)
Офлайн
Очередной раз огромное спасибо reclosedev
Офлайн