【问题标题】:Qt - Connect slot with argument using lambdaQt - 使用 lambda 将插槽与参数连接
【发布时间】:2015-01-31 11:01:17
【问题描述】:

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

我发现我可以使用 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 循环中迭代的最后一个组。

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

【问题讨论】:

标签: python qt lambda pyqt signals-slots


【解决方案1】:

问题在于 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)

【讨论】:

  • 不知道这存在于 python 中。太棒了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 2016-03-11
  • 2012-10-15
相关资源
最近更新 更多