Qt - 使用lambda连接带参数的插槽

时间:2014-12-03 01:44:56

标签: python qt lambda pyqt signals-slots

我有几个小部件将连接到一个需要额外参数的函数。

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

问题是参数在循环中被替换,而lambda函数只传递最后一个。

继承人我得到了什么:

self.widgets 是一个带有按钮组的按钮,为了简短起见,我们说它有2个按钮[QToolButton],链接到他们的按键:&#39 ;打'并且'停止'。

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

    def openMenu(self,group):
        print group

但无论我点击什么按钮,它总是会打印相同的组,最后一个在for循环中迭代。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

问题是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