问题
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