【问题标题】:PyQt5 clicked button created in loop [duplicate]PyQt5单击循环中创建的按钮[重复]
【发布时间】:2021-04-12 12:00:37
【问题描述】:

我试图在 pyqt5 中制作计算器,但在单击按钮时我无法正确传递数字来运行。 这是我的代码:

        buttons = ['7','8','9','/','MOD','AND','4','5','6','*','Or','Xor','1','2','3','.','Lsh','Not','0','+/-',',','+','=','Int','A','B','C','D','E','F']
        positions = [(i,j) for i in range(5) for j in range(6) ]
        #creating array of buttons
        self.gridButtons = [[0 for x in range(6)] for y in range(5)]
        for position, button in zip(positions,buttons):
            if button.isnumeric():
                print(button)
                self.gridButtons[position[0]] [position[1]] = QPushButton(button, clicked = lambda:self.numberPressed(button))

问题是当我按下按钮时,它会触发一个函数,但它没有传递像“1”、“2”这样的适当字符串,而是传递了按钮数组中的最后一个字符串“F”。我该如何克服呢?

【问题讨论】:

    标签: python pyqt5


    【解决方案1】:

    您的 lambda 在您的循环完全运行后的某个时间执行。这意味着 lambda 将始终与 for 循环的最后一个对象一起执行。

    为防止这种情况发生,您可以使用closure。 Python 有一种创建闭包的简单方法:使用 functools.partial 代替 lambda

    self.gridButtons[position[0]] [position[1]] = QPushButton(button, clicked = functools.partial(self.numberPressed, button))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 2023-02-03
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      相关资源
      最近更新 更多