编程语言
首页 > 编程语言> > python-如何在基于事件的QTreeView中启用/禁用项目?

python-如何在基于事件的QTreeView中启用/禁用项目?

作者:互联网

我想在发送特定信号时启用/禁用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中的错误,因为connect应该接受任何可调用的代码(示例代码在PyQt4中可以正常工作).

解决方法是,尝试将QStandardItem方法包装在lambda中:

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))

标签:qtreeview,pyside,signals-slots,python,qt
来源: https://codeday.me/bug/20191101/1984754.html