2014-12-03 94 views
0

我有几个小部件将连接到一个需要额外参数的函数。Qt - 使用lambda参数连接槽

我发现我可以使用lambda函数来传递函数的一些参数。

问题是参数在循环中被替换,并且lambda函数仅传递最后一个集合。

继承人我得到了什么:

self.widgets是密钥的词典]为组按钮,使之短,让我们说,它有2个按钮[QToolButton],与他们的钥匙:“戏'和'停止'。

def connections(self): 
    for group in self.widgets: 
     self.widgets[group].clicked.connect(lambda: self.openMenu(group)) 

    def openMenu(self,group): 
     print group 

但是不管我点击哪个按钮,它总是会打印相同的组,这是最后一次迭代的for循环。

有什么办法解决这个问题?

+0

可能重复(http://stackoverflow.com/questions/27208706/pyqt-connect-inside- for-loop-vs-separate-calls-results-in-different-behavior) – 2014-12-03 02:26:51

回答

2

问题是python的范围规则&关闭。您需要capture组:

def connections(self): 
    for group in self.widgets: 
     self.widgets[group].clicked.connect(lambda g=group: self.openMenu(g)) 

    def openMenu(self,group): 
     print group 
的[PyQt的内部连接的环路与不同的行为单独调用结果]
+0

不知道这存在于python中。惊人。 – 2014-12-03 02:04:03