Обработка нажатий нескольких кнопок с передачей самих кнопок в одну и ту же функцию
У меня есть список с кнопками. И я хочу, чтобы при нажатии на любую из этих кнопок срабатывала определенная функция, и она получала на вход саму нажатую кнопку... Вот код:
from PyQt5 import QtWidgets
from form import Ui_MainWindow
import sys
class mywindow(QtWidgets.QMainWindow):
def __init__(self):
super(mywindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
button_list = [self.ui.key1, self.ui.key2, self.ui.key3]
for button in button_list:
button.clicked.connect(lambda:self.on_key_click(button))
def on_key_click(self, button):
if not button.styleSheet():
button.setStyleSheet('background-color: #D3D3D3;')
button.setText('')
else:
button.setStyleSheet('')
button.setText('...')
app = QtWidgets.QApplication([])
application = mywindow()
application.show()
sys.exit(app.exec())
Понимаю, что вопрос баян, но кто, как ни я должен задать его еще раз
Ответы (2 шт):
Автор решения: Alexander Chernin
→ Ссылка
Либо так (остальное неизменно):
button.clicked.connect(lambda btn=button:self.on_key_click(btn))
Или так:
...
for ...:
button.clicked.connect(self.on_key_click)
def on_key_click(self):
button = self.sender()
Автор решения: S. Nick
→ Ссылка
Пожалуйста, публикуйте все модули, необходимые для воспроизведения вашего примера. Как вариант:
import sys
from PyQt5 import QtWidgets
#from form import Ui_MainWindow
class MyWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
# self.ui = Ui_MainWindow()
# self.ui.setupUi(self)
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
layout = QtWidgets.QHBoxLayout(self.centralwidget)
self.key1 = QtWidgets.QPushButton("key1")
self.key2 = QtWidgets.QPushButton("key2")
self.key3 = QtWidgets.QPushButton("key3")
# button_list = [self.ui.key1, self.ui.key2, self.ui.key3]
button_list = [self.key1, self.key2, self.key3]
for button in button_list:
button.clicked.connect(lambda ch, button=button :self.on_key_click(button))
layout.addWidget(button)
def on_key_click(self, button):
#print(button.text())
if not button.styleSheet():
button.setStyleSheet('background-color: #D3D3D3;')
button.setText('')
else:
button.setStyleSheet('')
button.setText('...')
if __name__ == "__main__":
app = QtWidgets.QApplication([])
application = MyWindow()
application.show()
sys.exit(app.exec_())
