Требуется получить какая кнопка была нажата в QButtonGroup
У меня есть QButtonGroup содержащий кнопки (100 штук) и
мне нужно получать какая из них нажата.
Данный код не вызывает функцию:
# При нажатии вызов функции выстрела
button_group.buttonClicked.connect(self.add_dot)
def add_dot(self, button):
print(button)
Данный код вызывает функцию, но sender() равен
<PyQt5.QtWidgets.QButtonGroup object at 0x0000000002E258B8>
а должен быть равен кнопке, которая была нажата.
# При нажатии вызов функции выстрела
button_group.buttonClicked.connect(lambda: self.add_dot(button_group.sender()))
def add_dot(self, button):
print(button)
Что я делаю не так?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Не так вы делаете то, что не предоставляете минимально-воспроизводимый пример.
Попробуйте так:
import sys
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.main_layout = QVBoxLayout(self)
self.buttonGroup = QButtonGroup(exclusive=False)
for i in range(7):
btn = QPushButton(f'Button_{i}')
btn.setCheckable(True)
self.buttonGroup.addButton(btn)
self.main_layout.addWidget(btn)
self.buttonGroup.buttonClicked.connect(self.check_button)
def check_button(self, btn):
print(f"\nнажата кнопка -> `{btn.text()} - {btn.isChecked()}`")
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyle("Fusion")
a_window = Window()
a_window.show()
sys.exit(app.exec_())
