我在這裏有個簡單的例子。我想要發生的是,當用戶更改'複選框'的切換狀態時,我希望它爲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