从QTreeWidgetItem子类PyQt/PySid发出信号的替代方法

2024-03-29 06:06:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现一个gui分析软件,它使用一个qtreewidgetitem类和几个定制的TreeWidgetItem类。树中的每个项都或多或少地负责自己的簿记,以跟踪数据集和附加到它的对象。我希望能够从自定义QTreeWidgetItems的函数中发出一个信号,但是以下代码导致了一个错误:myTWItem无法转换为QObject。有没有办法用这种方式从qtreewigetItem发出信号?在

import sys
from PyQt5 import QtCore, QtWidgets, QtGui


class myTWItem(QtWidgets.QTreeWidgetItem):
    childAdded = QtCore.pyqtSignal(object)

    def addChild(self, child):
        super(myTWItem, self).addChild(child)
        self.childAdded.emit(child)

app = QtWidgets.QApplication(sys.argv)
tw = QtWidgets.QTreeWidget()

item = myTWItem()

tw.addTopLevelItem(item)
item.setText(0, "James")

child = QtWidgets.QTreeWidgetItem()
child.setText(0, "Braddock")
item.addChild(child)

tw.show()
sys.exit(app.exec_())

输出:

^{pr2}$

Tags: importselfchildappsysguiitemtw
1条回答
网友
1楼 · 发布于 2024-03-29 06:06:25

一种方法是在父树小部件上定义自定义信号。然后,从该项中,您可以执行以下操作:

tree = self.treeWidget()
if tree is not None:
    tree.childAdded.emit(child)

当然,这里明显的缺点是,对于尚未添加到树中的项,这将不起作用(尽管在某些情况下,这可能是一个优势)。在

另一种方法是创建一个继承QObject的单独的signals类。为了保持轻量级,最好使用一个共享实例,而不是为每个项目创建一个实例。这还可以避免树中每个项都必须建立连接:

^{pr2}$

(注意:当然,用这两种方法中的任何一种都意味着{a1}不会返回您通常期望的结果)。在

相关问题 更多 >