Сохранение в переменной названия кнопки, которая была нажата
Я хочу после нажатия на кнопку, отследить какая кнопка была нажата.
Данное значение сохранить в переменой и вывести значение переменной в метод 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_())
