我在这里有个简单的例子。我想要发生的是,当用户更改'复选框'的切换状态时,我希望它为CustomTreeWidgetItem的属性设置属性值。当qtreewidgetitems复选框状态发生变化时触发信号
在这种情况下,每个CustomTreeWidgetItem都有一个叫做dataObject的attr,这是我存储我的类对象Family的地方。家庭有一个属性启用我希望此属性反映TreeWidgetItems的复选框的切换状态。
我在网上看了一圈,还没有找到解决方案。大多数答案都在C++中,或者他们造成错误。您可以通过点击打印按钮来测试结果。它应该反映这些变化。
以下是突出显示的位。
更新: 链接的问题没有回答我的问题。它不会返回点击复选框的值。
这段代码是干什么的?我需要修改哪些数据对象为True或False?目前它返回0或2.我不确定这是三态还是什么。希望有人能够解释发生了什么。
if column == 0 and role == 10:
我的自定义树控件项目有属性dataObject时。这是我存储我的类对象家庭其中有属性启用在其中。
self.dataObject = None
class Family:
def __init__(self, name, members=None, data=None):
self.name = name
self.enabled = True
希望有所帮助。
感谢
所有代码
# Imports
# ------------------------------------------------------------------------------
import sys
from PySide import QtGui, QtCore
# Class
# ------------------------------------------------------------------------------
class Family:
def __init__(self, name, members=None, data=None):
self.name = name
self.enabled = True
# Custom Tree Widget
# ------------------------------------------------------------------------------
class TreeNodeItem(QtGui.QTreeWidgetItem):
def __init__(self, parent, name):
## Init super class (QtGui.QTreeWidgetItem)
super(TreeNodeItem, self).__init__(parent)
# Column 0 - Text:
self.setText(0, name)
# Tree Node Data
self.dataObject = None
def setData(self, column, role, value):
if column == 0 and role == 10:
self.dataObject.enabled = value
super(TreeNodeItem, self).setData(column, role, value)
# Variables
# ------------------------------------------------------------------------------
Families = [
Family("Smith"),
Family("Michaels"),
Family("Wislon"),
Family("Yoder")
]
# Main
# ------------------------------------------------------------------------------
class Example(QtGui.QWidget):
def __init__(self,):
super(Example, self).__init__()
self.initUI()
def initUI(self):
# formatting
self.resize(400, 400)
self.setWindowTitle("Example")
# widgets
self.printData = QtGui.QPushButton("Print Families Data")
self.itemList = QtGui.QTreeWidget()
self.itemList.setItemsExpandable(True)
self.itemList.setAnimated(True)
self.itemList.setItemsExpandable(True)
self.itemList.setColumnCount(1)
self.itemList.setHeaderLabels(['Families'])
# signals
self.printData.clicked.connect(self.PrintAllData)
# layout - row/column/verticalpan/horizontalspan
self.mainLayout = QtGui.QGridLayout(self)
self.mainLayout.addWidget(self.itemList,0,0)
self.mainLayout.addWidget(self.printData,1,0)
self.center()
self.show()
self.UpdateFamilies()
def center(self):
qr = self.frameGeometry()
cp = QtGui.QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
def PrintAllData(self):
for f in Families:
print f.name, f.enabled
def UpdateFamilies(self):
treeWidget = self.itemList
treeWidget.clear()
for f in Families:
# Add Families
treeNode = TreeNodeItem(treeWidget, f.name)
# assign family class object to dataObject attr of treenode
treeNode.dataObject = f
treeNode.setCheckState(0, QtCore.Qt.Checked)
# Main
# ------------------------------------------------------------------------------
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
我试过他的答案,它并没有阻止任何信号。它仍然解雇额外人员。 – JokerMartini