我想在发送特定信号时启用/禁用QTreeWidget中的可检查项。
下列代码不起作用:

model = QStandardItemModel()
view = QTreeView()
view.setModel(model)
rootItem = QStandardItem()
rootItem = model.invisibleRootItem()

categoryItem = QStandardItem(item)
categoryItem.setCheckable(True)
rootItem.appendRow(categoryItem)

signalSource.availabilityChanged.connect(categoryItem.setEnabled)

它会产生错误:
TypeError: unhashable type: 'PySide.QtGui.QStandardItem'

是否有通过信号/插槽改变QStandardItem状态或数据的解决方案?

最佳答案

这看起来像PySide中的一个bug,因为connect应该接受任何可调用的(示例代码在PyQt4中正常工作)。
作为解决方法,请尝试在lambda中包装QStandardItem方法:

signalSource.availabilityChanged.connect(
    lambda enable: categoryItem.setEnabled(enable))

编辑
要连接循环中的项,请使用默认参数,如下所示:
for button in buttonList:
    item = QStandardItem("Test")
    ...
    button.toggled.connect(
        lambda enable, item=item: item.setEnabled(enable))

关于python - 如何在基于事件的QTreeView中启用/禁用项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9653721/

10-09 06:34