我创建了一个包含自定义类的对话框:
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中的等效概念是什么?
答案 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