【问题标题】:Emit every signals for each n element in list of QpushButton object为 QpushButton 对象列表中的每个 n 元素发出每个信号
【发布时间】:2017-10-08 13:30:10
【问题描述】:

我有 QPushButton 列表。我希望能够使列表中的所有按钮以更简单的方式发出信号。

这是我的代码:

 def btn_click(self):
self.menu_list[0].clicked.connect(lambda: self.add_cart(self.menu_list[0]))
self.menu_list[1].clicked.connect(lambda: self.add_cart(self.menu_list[1]))
self.menu_list[2].clicked.connect(lambda: self.add_cart(self.menu_list[2]))
self.menu_list[3].clicked.connect(lambda: self.add_cart(self.menu_list[3]))
self.menu_list[4].clicked.connect(lambda: self.add_cart(self.menu_list[4]))
self.menu_list[5].clicked.connect(lambda: self.add_cart(self.menu_list[5]))
def add_cart(self):
print(b.text())

【问题讨论】:

  • 这听起来像是QSignalMapper 的任务。

标签: python-3.x pyqt pyqt4 pyqt5


【解决方案1】:

你可以循环执行:

主要

def btn_click(self):
    for button in menu_list:
        button.clicked.connect(self.add_cart)

def add_cart(self):
    b = self.sender()
    print(b.text())

另类

def btn_click(self):
    for button in self.menu_list:
        button.clicked.connect(lambda btn=button: self.add_cart(btn))

请注意,您需要 btn=button 来关闭,否则所有按钮都会引用最后一个。

ps:有关主要方式的更多说明,请阅读下面的@ekhumoro 评论

【讨论】:

  • clicked 信号发送一个布尔型 checked 参数,它将破坏您的 btn 参数。无论如何,在这种特殊情况下,我认为最好直接连接到add_cart,然后使用b = self.sender() 获取发送信号的按钮。
  • 谢谢你,先生。但它仍然不起作用。但你给了我一个循环它的想法。
  • 这根本不是问题,只需在lambda中的args中添加通配符,就像这样lambda _, btn=button:...
  • @ekhumoro 谢谢你,先生,正如你所说,我想出了一个和你一样的想法,它有效^_^
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 2018-03-11
  • 2020-11-05
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
相关资源
最近更新 更多