关键代码如下:
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 500, 800)
self.setWindowTitle('Caculation')
# self.setWindowIcon(QIcon('xdbcb8.ico'))
self.resultText = QLineEdit('0', self)
self.resultText.setGeometry(20, 30, 400, 50)
self.resultText.setEnabled(False)
for i in range(3):
for j in range(3):
num = i * 3 + j + 1
btn_num = QPushButton(str(num), self)
btn_num.setGeometry(50 + j * 50, 150 + i * 50, 70, 30)
print(num)
btn_num.clicked.connect(lambda: self.showMessage(num))
self.show()
def showMessage(self, num):
print(':' + str(num))
self.resultText.setText(str(num))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
问题就是 showMessage函数输出的 num 变量总是9,需要的效果根据不同的按钮输出不同的数字。
因为lambda匿名函数(或称闭包)传递的是num的地址,最后你的num的值都是9,参考https://www.liaoxuefeng.com/w...
解决方法改用偏函数