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 循环中迭代的最后一个组。
有任何解决这个问题的方法吗?
问题是 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)