#python #pyside2 #qpushbutton
#python #pyside2 #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_()
Когда я запускаю этот код, я получаю окно, подобное этому:
Под кнопками есть QLabel, и я хочу, чтобы при нажатии на любую кнопку метка кнопки ссылалась на эту QLabel, но я получаю кучу запутанных ошибок в терминале. Что не так с моим кодом, помогите мне, спасибо.
Ответ №1:
Нажатый сигнал перегружен, поэтому он принимает 2 подписи, в которых он может отправлять bool или нет. Подпись по умолчанию зависит от библиотеки, в данном случае кажется, что PySide2 по умолчанию не отправляет параметр «checked», в отличие от PyQt5, который это делает.
Решение состоит в том, чтобы указать подпись:
button.clicked[bool].connect(lambda checked, a=a: self.button_clicked(a))