开发 pyqt4 树小部件
Posted
技术标签:
【中文标题】开发 pyqt4 树小部件【英文标题】:Developing pyqt4 tree widget 【发布时间】:2012-10-05 00:04:09 【问题描述】:我需要写一棵树吗?,在 pyqt 中。它看起来像这样:
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)
您对此有何建议? QTreeWidget
? QTreeView?
这将是我将用于构建 sql 查询的可点击项目。
感谢阅读。
【问题讨论】:
【参考方案1】:我建议您使用QTreeWidget 而不是QTreeView,因为您的任务非常简单。 QTreeView(带有自定义模型,例如QStandardItemModel)用于困难事件。你的很简单。
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_())
【讨论】:
到 QTreeWidget 和 QTreeView 的链接已损坏。这是他们的 API:pyqt.sourceforge.net/Docs/PyQt4/classes.html以上是关于开发 pyqt4 树小部件的主要内容,如果未能解决你的问题,请参考以下文章