Qt - 使用 lambda 将插槽与参数连接

f.r*_*ues 2 python lambda qt pyqt signals-slots

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

我发现我可以使用 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
Run Code Online (Sandbox Code Playgroud)

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

有任何解决这个问题的方法吗?

Ger*_*rat 5

问题是 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)
Run Code Online (Sandbox Code Playgroud)