【问题标题】:Create pyqt5 pushbuttons with click event using loop使用循环创建带有点击事件的 pyqt5 按钮
【发布时间】:2017-12-12 13:03:42
【问题描述】:

如何使用循环连接创建按钮

list = ['apple','orange','banana','carrot']
for i,s in enumerate(list)
    list[i] = QtWidgets.QPushButton(self.scrollAreaWidgetContents)
    list[i].setText(s[0])
    list[i].clicked.connect(lambda:getbuttontext(list[i].text()))

这里是getbuttontext函数:

def getbuttontext(n):
    print(n)

我的问题是,当我单击任何按钮时,函数会打印“carrot” 请问如何解决...

【问题讨论】:

  • 请编辑您的问题并添加一个真实的问题。不清楚你在问什么......
  • 您的问题是什么? PHP 与您的问题有什么关系?
  • 给我一个打印循环内每个按钮文本的函数
  • @Derar 什么按钮,什么循环?还显示您尝试解决的问题,阅读 SO 规则:How to Ask

标签: python pyqt pyqt5


【解决方案1】:

解决方法很简单,定义lambda函数的输入参数:

fruits = ['apple','orange','banana','carrot']
for i,s in enumerate(fruits)
    btn = QtWidgets.QPushButton(self.scrollAreaWidgetContents)
    btn.setText(s[0])
    btn.clicked.connect(lambda checked, text=s : getbuttontext(text))

注意: 我放了checked,因为它是默认传递clicked信号的参数。

【讨论】:

  • @Derar 检查我当前的答案,您不应该使用列表来存储字符串和按钮。 list 也是保留字
  • TypeError: () missing 1 required positional argument: 'checked' ,也没有检查,它只是给出了错误值
  • @FoggyMindedGreenhorn 确定你使用的是 PySide2,试试btn.clicked.connect(lambda *args, text=s : getbuttontext(text))btn.clicked[bool].connect(lambda checked, text=s : getbuttontext(text)),见stackoverflow.com/questions/65185005/…
  • 谢谢,它有效!是的,我使用 PySide2,对不起,我认为他们在这件事上的行为相同,没想到那么远 @eyllanesc
  • @eyllanesc,为什么需要枚举?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多