pyqt:如何动态连接信号与用户提供的变量?
我创建了一个自定义类的对话框:
d = ModifyRect(ctrl_name, rect_name)
这个对话框是以非模态的方式显示的,也就是说用户可以在对话框打开的同时与其他窗口进行交互。当用户接受或拒绝这个对话框时,我想在我的主窗口上调用一个函数,并传入这两个变量,也就是说,我希望调用这个槽函数:
@QtCore.pyqtSlot("QString","QString")
def modifyRectAccepted(self, ctrl_name, rect_name):
#foo
我该如何将 d
的 accepted
事件连接到我的 MainWindow
的 modifyRectAccepted
函数,并传入这两个参数呢?或者说,至少连接这两个,但我希望能传入 ModifyRect
的实例,这样我就可以从中获取这些参数。
在 pygtk 中,这个操作非常简单——你可以在 connect
中传入更多的变量,它们会被转发,而且发出信号的控件总是会被传入。那么在 PyQt 中有什么类似的概念呢?
1 个回答
3
你不能直接这样做。你需要使用信号映射器或者中间槽。可以看看这个问题,几天前有人回答过。
或者,如果你只是想知道信号的来源,可以使用QObject的sender()
方法。
编辑:要使用闭包作为中间槽,你必须使用新风格的信号和槽机制。这样做更符合Python的风格,并且可以让你指定任何可调用的对象。像这样:
d = ModifyRect()
l = lambda: modifyRectAccepted(ctrl_name, rect_name)
d.accepted.connect(l)
def modifyRectAccepted(self, ctrl_name, rect_name):
#foo