PyQt:适合所有人的单一信号

时间:2014-04-17 20:04:50

标签: python pyqt

单个QTreeWidget:

tree=QtGui.QTreeWidget()

单个QTreeWidgetItem:

item=QtGui.QTreeWidgetItem()

向树添加项目:

tree.addTopLevelItem(item)

逐项向项目添加4个不同的小部件:

tree.setItemWidget(item, 1, QtGui.QLineEdit() )
tree.setItemWidget(item, 2, QtGui.QComboBox() )
tree.setItemWidget(item, 3, QtGui.QDateEdit() )
tree.setItemWidget(item, 4, QtGui.QCheckBox() )

现在在一个单循环中我需要将所有4个子项目小部件连接到同一个函数。非工作示例:

for i in range(1,5):
    tree.itemWidget(item, i).activated.connect(myFunction)

以上示例的问题:并非所有4个小部件都具有相同的.activated信号。

例如,

QLineEdit()拥有自己的.textChangedQDateEdit()带有.dateChangedQCheckBox()带有.stateChanged

我正在寻找的是一个可以与所有子窗口小部件一起使用的信号解决方案(特别感兴趣的是点击(首先或任何点击)触发的子窗口小部件。

1 个答案:

答案 0 :(得分:1)

你做不到。但是可以转发信号,以便您可以从QLineEdit派生并创建一个“激活”的自定义信号,该信号连接到textChanged init中的QLineEdit信号。这就是我称之为“适配器”的信号,您需要派生每个类。但这是额外的工作,如果它以其他方式节省你的工作,那是值得的。否则,根据窗口小部件的类型更简单地获得if / else序列,但是使用isclass有点不好意思。因此,如果额外的工作不值得努力,并且不想使用基于类型的if / else连接到正确的信号,那么您唯一的选择是在调用tree.setItemWidget(item, index, widget)后连接到相应的信号。