Developing pyqt4 tree widget

非 Y 不嫁゛ 提交于 2019-12-11 05:21:51

问题


i need to write a tree?, in pyqt. It looks like this:

Clients(this is text)  
   Type A (this is a Clients child and has a checkbox)  
    Type B (this is a Clients child and has a checkbox)  
Vendors(this is text) 
    Mary  (this is a Vendors child and has a checkbox)   
    Arnold  (this is a Vendors child and has a checkbox)  
Time Period  
    Init(this is a Time Period child, and would be a calendarWidget for date selection)  
    End (this is a Time Period child, and would be a calendarWidget for date selection)  

What would you recommend for this? QTreeWidget? QTreeView? This will be clickable items that i'll use to build sql queries.
Thanks for reading.


回答1:


I recommend you to use QTreeWidget instead of QTreeView, because your tasks are pretty simple. QTreeView (with custom model, for example QStandardItemModel) is for difficult events. Yours is simple.

import sys
from PyQt4 import QtCore, QtGui


class Window(QtGui.QWidget):

    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.treeWidget = QtGui.QTreeWidget()
        self.treeWidget.setHeaderHidden(True)
        self.addItems(self.treeWidget.invisibleRootItem())
        self.treeWidget.itemChanged.connect (self.handleChanged)
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.treeWidget)
        self.setLayout(layout)

    def addItems(self, parent):
        column = 0
        clients_item = self.addParent(parent, column, 'Clients', 'data Clients')
        vendors_item = self.addParent(parent, column, 'Vendors', 'data Vendors')
        time_period_item = self.addParent(parent, column, 'Time Period', 'data Time Period')

        self.addChild(clients_item, column, 'Type A', 'data Type A')
        self.addChild(clients_item, column, 'Type B', 'data Type B')

        self.addChild(vendors_item, column, 'Mary', 'data Mary')
        self.addChild(vendors_item, column, 'Arnold', 'data Arnold')

        self.addChild(time_period_item, column, 'Init', 'data Init')
        self.addChild(time_period_item, column, 'End', 'data End')

    def addParent(self, parent, column, title, data):
        item = QtGui.QTreeWidgetItem(parent, [title])
        item.setData(column, QtCore.Qt.UserRole, data)
        item.setChildIndicatorPolicy(QtGui.QTreeWidgetItem.ShowIndicator)
        item.setExpanded (True)
        return item

    def addChild(self, parent, column, title, data):
        item = QtGui.QTreeWidgetItem(parent, [title])
        item.setData(column, QtCore.Qt.UserRole, data)
        item.setCheckState (column, QtCore.Qt.Unchecked)
        return item

    def handleChanged(self, item, column):
        if item.checkState(column) == QtCore.Qt.Checked:
            print "checked", item, item.text(column)
        if item.checkState(column) == QtCore.Qt.Unchecked:
            print "unchecked", item, item.text(column)

if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())


来源:https://stackoverflow.com/questions/12737721/developing-pyqt4-tree-widget

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!