Найти - Пользователи
Полная версия: Перебор значений в QTreeWidget
Начало » Python для новичков » Перебор значений в QTreeWidget
1
denveren0k
Доброго времени суток уважаемые форумчане.
Очень нужна ваша помощь в работе с 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_())

Сервера отображаются обычным не раскрывающимся списком, а нужно сделать что бы они отображали раскрывающийся список на каждом сервере и была возможность выбрать определенный тег.
Т.е нужно отобразить сервера как раскрывающиеся списки и при нажатии на раскрытие какого нибудь сервера вызывалась функция где будет опрос этого сервера с дальнейшим выводом в этом же дереве.
Перегуглил все что можно, но ничего похожего не нашел.
Заранее спасибо за помощь.
reclosedev
Добавление дочерних элементов в 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
denveren0k
Очередной раз огромное спасибо reclosedev
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB