Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error lambda missing 1 required positional argument when using with QPushButton

This is entire my code:

import sys

from PySide2.QtCore import Qt
from PySide2.QtWidgets import (
    QApplication,
    QHBoxLayout,
    QLabel,
    QMainWindow,
    QPushButton,
    QVBoxLayout,
    QWidget,
)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        v = QVBoxLayout()
        h = QHBoxLayout()

        for a in range(10):
            button = QPushButton(str(a))
            button.clicked.connect(lambda checked, a=a: self.button_clicked(a)) # error here

            h.addWidget(button)

        v.addLayout(h)

        self.label = QLabel("")
        v.addWidget(self.label)
        
        w = QWidget()
        w.setLayout(v)

        self.setCentralWidget(w)

    def button_clicked(self, n):
        self.label.setText(str(n))

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

When I run this code, I get a window like this:image here


Below the buttons, there is a QLabel, and I want when I click on any button, the button's label will refer to this QLabel, but I get a bunch of confusing errors in the terminal. What's wrong with my code, help me, thanks.

like image 852
Claire Duong Avatar asked Dec 03 '25 17:12

Claire Duong


1 Answers

The clicked signal is overload so it accepts 2 signatures where it can send a bool or not. The default signature depends on the library, in this case it seems that PySide2 by default does not send the "checked" parameter, unlike PyQt5 that does.

The solution is to indicate the signature:

button.clicked[bool].connect(lambda checked, a=a: self.button_clicked(a))
like image 95
eyllanesc Avatar answered Dec 06 '25 07:12

eyllanesc



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!