PyQt:单个信号

2024-07-03 06:20:18 发布

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

单个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。你知道吗

我正在寻找的是一个单一信号的解决方案,可以与所有子部件(特别是在一个得到点击(第一次或只是任何点击)触发感兴趣的使用)。你知道吗


Tags: 项目tree示例信号部件itemqtguiactivated
1条回答
网友
1楼 · 发布于 2024-07-03 06:20:18

不能。但是可以转发信号,这样就可以从QLineEdit派生并创建一个自定义信号“activated”,该信号连接到QLineEditinit中的textChanged信号。这就是我所说的“适配器”信号,您需要派生每个类。但这是额外的工作,只有当它节省你在其他方面的工作才是值得的。否则,基于小部件类型的if/else序列就更简单了,但是使用isclass有点不受欢迎。因此,如果额外的工作不值得努力,并且不想使用基于类型的if/else连接到适当的信号,那么您唯一的选择就是在调用tree.setItemWidget(item, index, widget)之后连接到适当的信号。你知道吗

相关问题 更多 >