如何检查 QTreeWidget 项目的状态?

alp*_*ric 3 python pyqt

使用:

    item=QtGui.QTreeWidgetItem()
    item.setCheckState(0,QtCore.Qt.Unchecked)
Run Code Online (Sandbox Code Playgroud)

TreeWidget 项被设置为显示一个复选框。如果您向我展示如何将一个项目的复选框状态更改连接到一个函数,我将不胜感激(这样我就可以在每次项目的复选框状态更改时链接一个函数)。我想知道应该查询什么 Item 的属性才能获得复选框的当前状态。到目前为止,我一直在使用 QTreeWidget 的

.itemChanged.connect(self.myFunction)
Run Code Online (Sandbox Code Playgroud)

但我得到的只是 Item 对象本身。可以使用 Item 的什么属性来获取其复选框的状态?...

Bru*_*elb 6

看起来我曾经遇到过你的问题,并使用了ekhumoro 的这个解决方案

def handle(self, item, column):
    self.treeWidget.blockSignals(True)
    if item.checkState(column) == QtCore.Qt.Checked:
        self.handleChecked(item, column)
    elif item.checkState(column) == QtCore.Qt.Unchecked:
        self.handleUnchecked(item, column)
    self.treeWidget.blockSignals(False)

class TreeWidgetItem(QtGui.QTreeWidgetItem):
    def setData(self, column, role, value):
        state = self.checkState(column)
        QtGui.QTreeWidgetItem.setData(self, column, role, value)
        if (role == QtCore.Qt.CheckStateRole and
            state != self.checkState(column)):
            treewidget = self.treeWidget()
            if treewidget is not None:
                treewidget.itemChecked.emit(self, column)

class Window(QtGui.QTreeWidget):
    itemChecked = QtCore.pyqtSignal(object, int)

    def __init__(self, rows, columns):
        QtGui.QTreeWidget.__init__(self)
        self.itemChecked.connect(self.handleItemChecked)

    def handleItemChecked(self, item, column):
        print 'ItemChecked', int(item.checkState(column))
Run Code Online (Sandbox Code Playgroud)

对我来说效果很好:)