与 QPushButton 一起使用时,错误 lambda 缺少 1 个必需的位置参数
Error lambda missing 1 required positional argument when using with QPushButton
这是我的全部代码:
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_()
当我 运行 这段代码时,我得到一个 window 这样的:
在按钮下方,有一个 QLabel,我希望当我点击任何按钮时,按钮的标签将引用这个 QLabel,但我在终端中遇到了一堆令人困惑的错误。我的代码有什么问题,帮帮我,谢谢。
点击信号过载,因此它接受 2 个签名,它可以发送布尔值或不发送布尔值。默认签名取决于库,在这种情况下,PySide2 似乎默认不发送“checked”参数,这与 PyQt5 不同。
解决方法是注明签名:
button.clicked<b>[bool]</b>.connect(lambda checked, a=a: self.button_clicked(a))
这是我的全部代码:
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_()
当我 运行 这段代码时,我得到一个 window 这样的:
在按钮下方,有一个 QLabel,我希望当我点击任何按钮时,按钮的标签将引用这个 QLabel,但我在终端中遇到了一堆令人困惑的错误。我的代码有什么问题,帮帮我,谢谢。
点击信号过载,因此它接受 2 个签名,它可以发送布尔值或不发送布尔值。默认签名取决于库,在这种情况下,PySide2 似乎默认不发送“checked”参数,这与 PyQt5 不同。
解决方法是注明签名:
button.clicked<b>[bool]</b>.connect(lambda checked, a=a: self.button_clicked(a))