0

I dynamically add QPushbutton with a loop in which the button is setup with clicked even using lambda. But when I click the button, it can't print the correct value for me. It always give me the last value.

import sys
from PyQt5.QtWidgets import \
    (QApplication,QMainWindow, QPushButton,
     QVBoxLayout, QWidget)


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        qv = QVBoxLayout()
        test_list = [['value1','button_text1'],['value2','button_text2']]
        for item in test_list:
            btn = QPushButton(item[1])
            btn.clicked.connect(lambda x:self.button_clicked(item[0]))
            qv.addWidget(btn)
        dummy_widget = QWidget()
        dummy_widget.setLayout(qv)
        self.setCentralWidget(dummy_widget)
        self.setFixedSize(400, 300)

    def button_clicked(self, item_text):
        print(item_text)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

The code btn.clicked.connect(lambda x:self.button_clicked(item[0])) always give me : value2...Why?

NorthBig
  • 47
  • 1
  • 9

0 Answers0