pyqt5 показать, какая кнопка была нажата
Я новичок в PyQT5, и я хочу иметь несколько кнопок, и чтобы одна из них была нажата последней в "проверенном" состоянии. Когда нажата другая кнопка, предыдущая становится "непроверенной", а нажатая кнопка "проверена".
import sys
from PyQt5.QtWidgets import *
class Example(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(30, 30, 400, 200)
self.initUI()
def initUI(self):
self.button1 = QPushButton(self)
self.button1.setGeometry(40, 40, 100, 50)
self.button1.setText("Button 1")
self.button2 = QPushButton(self)
self.button2.setGeometry(150, 40, 100, 50)
self.button2.setText("Button 2")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
3 ответа
Вы можете использовать частично functools или метод отправителя, чтобы проверить, какая кнопка была нажата:
import sys
from PyQt5.QtWidgets import *
from functools import partial
class Example(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(30, 30, 400, 200)
self.initUI()
def initUI(self):
self.button1 = QPushButton(self)
self.button1.setGeometry(40, 40, 100, 50)
self.button1.setText("Button 1")
self.button1.clicked.connect(partial(self.clicked_btn, 'Button 1'))
self.button2 = QPushButton(self)
self.button2.setGeometry(150, 40, 100, 50)
self.button2.setText("Button 2")
self.button2.clicked.connect(partial(self.clicked_btn, 'Button 2'))
self.show()
def clicked_btn(self, value):
print(f'{value} clicked')
sender = self.sender()
print(f'Sender says: {sender.text()} was clicked')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Создавая свой код, вы можете добавить button1
а также button2
к QButtonGroup
с exclusive
свойство установлено в True
,
class Example(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(30, 30, 400, 200)
self.initUI()
def initUI(self):
self.button1 = QPushButton(self)
self.button1.setGeometry(40, 40, 100, 50)
self.button1.setText("Button 1")
self.button2 = QPushButton(self)
self.button2.setGeometry(150, 40, 100, 50)
self.button2.setText("Button 2")
self.btn_grp = QButtonGroup()
self.btn_grp.setExclusive(True)
self.btn_grp.addButton(self.button1)
self.btn_grp.addButton(self.button2)
self.btn_grp.buttonClicked.connect(self.on_click)
self.show()
def on_click(self, btn):
pass # do something with the button clicked
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Здесь я также подключил пустой слот к сигналу QButtonGroup.buttonClicked
, который выдается при каждом нажатии кнопки из группы.
Чтобы выяснить, какая кнопка является проверенной в данный момент, вы можете вызвать методы QButtonGroup.checkedButton()
а также QButtonGroup.checkedId()
, Бывший вернет QButton
объект и последний вернет индекс int
, в соответствии с порядком, в котором кнопки были добавлены в группу.
- Сделайте кнопки проверяемыми с помощью setCheckable(True)
Добавьте кнопки в QButtonGroup(), а остальные сортируются автоматически:
class Example(QWidget): def __init__(self): super().__init__() self.setGeometry(30, 30, 400, 200) self.initUI() def initUI(self): self.button1 = QPushButton(self) self.button1.setGeometry(40, 40, 100, 50) self.button1.setText("Button 1") self.button1.setCheckable(True) self.button2 = QPushButton(self) self.button2.setGeometry(150, 40, 100, 50) self.button2.setText("Button 2") self.button2.setCheckable(True) self.my_button_group = QButtonGroup() self.my_button_group.addButton(self.button1) self.my_button_group.addButton(self.button2) self.show()