Сохранение в переменной названия кнопки, которая была нажата

Я хочу после нажатия на кнопку, отследить какая кнопка была нажата.
Данное значение сохранить в переменой и вывести значение переменной в метод click().

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *

class Ui_Window1(object):
    def setupUi(self, Window1):
        Window1.setObjectName('Window1')
        Window1.resize(450, 800)
        self.Main1 = QtWidgets.QWidget(Window1)
        self.Main1.setObjectName('Main1')

        self.font1 = self.create_style('Bahnschrift SemiBold', 9, True)

        self.button_1 = self.create_widget(30, 235, 390, 60, self.font1, '#4c5359', '#363940', '#ffffff', '2', '30', 'button 1')
        self.button_2 = self.create_widget(30, 325, 390, 60, self.font1, '#4c5359', '#363940', '#ffffff', '2', '30', 'button 2')
        self.button_3 = self.create_widget(30, 415, 390, 60, self.font1, '#4c5359', '#363940', '#ffffff', '2', '30', 'button 3')
        self.button_4 = self.create_widget(30, 505, 390, 60, self.font1, '#4c5359', '#363940', '#ffffff', '2', '30', 'button 4')
        
        self.button_1.clicked.connect(self.click)
        self.button_2.clicked.connect(self.click)
        self.button_3.clicked.connect(self.click)
        self.button_4.clicked.connect(self.click)

        self.check = QButtonGroup()
        self.check.setExclusive(True)
        self.check.addButton(self.button_1)
        self.check.addButton(self.button_2)
        self.check.addButton(self.button_3)
        self.check.addButton(self.button_4)

        self.check.buttonClicked.connect(self.press)

        Window1.setCentralWidget(self.Main1)
        QtCore.QMetaObject.connectSlotsByName(Window1)

    def press(self, but):
        if but == self.button_1:
            self.but_check = 'button_1'
        elif but == self.button_2:
            self.but_check = 'button_2'
        elif but == self.button_3:
            self.but_check = 'button_3'
        elif but == self.button_4:
            self.but_check = 'button_4'

        return self.but_check

    def click(self):
        print(self.but_check)

    def create_style(self, text, size, boole):
        self.name = QtGui.QFont()
        self.name.setFamily(text)
        self.name.setPointSize(size)
        self.name.setBold(boole)

        return self.name

    def create_widget(self, x, y, w, h, font, HEX1, HEX2, HEX3, d, r, text):
        self.name = QtWidgets.QPushButton(self.Main1)
        self.name.setGeometry(QtCore.QRect(x, y, w, h))
        self.name.setFont(font)
        self.name.setStyleSheet('background-color: ' + HEX1 + '; border :' + d + 'px solid' + HEX2 + '; border-radius :' + r + '; color: ' + HEX3)
        self.name.setText(text)
        self.name.show()

        return self.name

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Window1 = QtWidgets.QMainWindow()
    ui = Ui_Window1()
    ui.setupUi(Window1)
    Window1.show()
    sys.exit(app.exec_())


Ответы (1 шт):

Автор решения: S. Nick

Ваше задача должна выглядеть примерно так:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class MainWindow(QtWidgets.QMainWindow):
    HEX1, HEX2, HEX3 = '#4c5359', '#363940', '#ffffff'
    d, r = 2, 30
    
    def __init__(self):
        super().__init__()

        self.centralWidget = QtWidgets.QWidget()
        self.centralWidget.setObjectName("centralWidget")
        self.setCentralWidget(self.centralWidget)        
        
        self.label = QtWidgets.QLabel(alignment=Qt.AlignCenter)
        self.label.setWordWrap(True)
        
        self.layout = QVBoxLayout(self.centralWidget)
        self.layout.setSpacing(7)
        self.layout.addWidget(self.label, 1)
        
        for i in range(4):
            button = QtWidgets.QPushButton()
            button.setMinimumHeight(60)
            button.setStyleSheet(f'''
                QPushButton {{
                    background-color: {self.HEX1};
                    border: {self.d}px solid {self.HEX2};
                    border-radius: {self.r};
                    color: {self.HEX3};
                    width: 390;
                    height: 60;
                }}
            ''')
            button.setText(f'button {i+1}')
            button.clicked.connect(lambda ch, btn=button: self.clicked_button(btn))
            self.layout.addWidget(button)

        self.layout.addStretch(1)
        
    def clicked_button(self, button):
        text_button = button.text()
        #print(f'{text_button}')
        self.label.setText(f'Последняя нажатая кнопка: `{text_button}`')
        
      

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    app.setFont(QtGui.QFont("Bahnschrift SemiBold", 12, QtGui.QFont.Bold))
    app.setStyleSheet('''
        #centralWidget {
            background-image: url(first.jpg);
        }
        QLabel {
            font-size: 18pt;
            color: white;
        }
    ''')
    w = MainWindow()
    w.resize(450, 600)
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка