Как подключить множество кнопок к одному методу в PyQt?
Есть 21 кнопка, конечно можно прописывать:
pushButton.clicked.connect(self.run)
к каждой кнопке, но мне кажется что есть способ лучше.
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(480, 720)
MainWindow.setMinimumSize(QtCore.QSize(480, 720))
MainWindow.setMaximumSize(QtCore.QSize(480, 720))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lcdNumber = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber.setGeometry(QtCore.QRect(0, 0, 480, 150))
self.lcdNumber.setMinimumSize(QtCore.QSize(480, 150))
self.lcdNumber.setObjectName("lcdNumber")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(360, 150, 120, 111))
self.pushButton_2.setMinimumSize(QtCore.QSize(120, 0))
self.pushButton_2.setMaximumSize(QtCore.QSize(120, 114))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiLight")
font.setPointSize(22)
font.setBold(True)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(75)
self.pushButton_2.setFont(font)
self.pushButton_2.setObjectName("pushButton_2")
self.buttonGroup = QtWidgets.QButtonGroup(MainWindow)
self.buttonGroup.setObjectName("buttonGroup")
self.buttonGroup.addButton(self.pushButton_2)
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(240, 150, 120, 111))
self.pushButton_3.setMinimumSize(QtCore.QSize(120, 0))
self.pushButton_3.setMaximumSize(QtCore.QSize(120, 114))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiLight")
font.setPointSize(22)
font.setBold(True)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(75)
self.pushButton_3.setFont(font)
self.pushButton_3.setObjectName("pushButton_3")
self.buttonGroup.addButton(self.pushButton_3)
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
То, что вы задумали, может выглядеть примерно так:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.lcdNumber = QtWidgets.QLCDNumber()
self.lcdNumber.setMinimumHeight(70)
self.lcdNumber.display('')
self.buttonGroup = QtWidgets.QButtonGroup(self)
self.buttonGroup.buttonClicked[QAbstractButton].connect(self.set_label)
num = 21 # попробуйте задать другое значение
column = 4 # попробуйте задать другое значение
self.gridLayout.addWidget(self.lcdNumber, 0, 0, 1, column)
for step in range(num):
pushButton = QtWidgets.QPushButton(f'{step}')
pushButton.setMinimumSize(QtCore.QSize(50, 50))
pushButton.setMaximumSize(QtCore.QSize(50, 50))
pushButton.setFocusPolicy(QtCore.Qt.NoFocus)
self.buttonGroup.addButton(pushButton)
self.gridLayout.addWidget(pushButton, step // column+1, step % column)
self.label = QLabel()
self.gridLayout.addWidget(self.label, step+1, 0, 1, column)
def set_label(self, button):
num = button.text()
self.label.setText(f'Вы нажали кнопку с текстом <b>{num}<\b>')
self.lcdNumber.display(num)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.resize(200, 400)
w.show()
sys.exit(app.exec_())
