pyqt:使用用户提供的变量动态连接信号?

时间:2011-05-03 23:15:49

标签: python qt qt4 pyqt pyqt4

我创建了一个包含自定义类的对话框:

d = ModifyRect(ctrl_name, rect_name)

无模式地显示。当它被接受或拒绝时,我想在我的MainWindow上调用一个函数来传递这两个变量,即应该调用这个插槽:

@QtCore.pyqtSlot("QString","QString")
def modifyRectAccepted(self, ctrl_name, rect_name):
    #foo

如何将d的{​​{1}}与accepted的{​​{1}}联系起来,传递这两个参数?或者甚至连接两者,但至少传递MainWindow实例,以便我可以从那里抓住它们。

在pygtk中这非常简单 - 您可以将更多变量传递到modifyRectAccepted并转发它们,并且无论如何总是传入发射小部件.PyQt中的等效概念是什么?

1 个答案:

答案 0 :(得分:2)

你不能直接这样做。您需要使用信号映射器或中间插槽。请参阅几天前的this question回复。

或者,如果您只对信号源感兴趣,请使用QObject的sender()方法。

修改 要将闭包用作中间插槽,必须使用New-syle信号和插槽范例。这种方式更pythonic,并允许您指定任何可调用。像这样:

d = ModifyRect()

l = lambda: modifyRectAccepted(ctrl_name, rect_name)
d.accepted.connect(l)

def modifyRectAccepted(self, ctrl_name, rect_name):
    #foo