我正在实现一个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}$
一种方法是在父树小部件上定义自定义信号。然后,从该项中,您可以执行以下操作:
当然,这里明显的缺点是,对于尚未添加到树中的项,这将不起作用(尽管在某些情况下,这可能是一个优势)。在
另一种方法是创建一个继承
^{pr2}$QObject
的单独的signals类。为了保持轻量级,最好使用一个共享实例,而不是为每个项目创建一个实例。这还可以避免树中每个项都必须建立连接:(注意:当然,用这两种方法中的任何一种都意味着{a1}不会返回您通常期望的结果)。在
相关问题 更多 >
编程相关推荐