2011-05-03 41 views
1

我创建一个自定义类的对话:pyqt:用用户提供的变量动态连接信号?

d = ModifyRect(ctrl_name, rect_name) 

它是无模式显示。当它被接受或拒绝,我想打电话给我的主窗口通过在这两个变量的函数,即此插槽应该叫:

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

如何去连接dacceptedMainWindow“ s modifyRectAccepted,传入这两个参数?甚至连接这两个,但至少要通过ModifyRect实例,以便我可以从那里抓取它们。

pygtk这很简单 - 您可以将更多变量传递到connect并且它们会被转发,并且无论如何发送的小部件总是被传入.PyQt中的等价概念是什么?

回答

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 
+0

我可以制作一个中间插槽吗? – Claudiu 2011-05-04 12:17:43

+0

当然。你可以做到这一点。 – takoi 2011-05-04 13:02:05

+0

你能告诉我如何?我将如何连接它?据我了解,我需要用'SLOT()'指定一个插槽名称,并且它必须位于主窗口上..所以我如何将它作为插槽的匿名/内部函数? – Claudiu 2011-05-04 13:34:45