Требуется получить какая кнопка была нажата в 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_())

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

→ Ссылка