2

pyQt5 の QButtonGroup 内でいくつかの QRadioButtons を使用しています。ユーザーが排他的なオプションのいずれかを選択できるようにしたい、または何も選択できないようにしたいので、誤ってラジオボタンをクリックした場合、もう一度クリックしてチェックを外すことができるようにする必要があります。

私の現在のアプローチは、クリックされたメソッドをボタンのステータスをチェックするカスタム関数に接続することですが、怪しげなクリックカウンターを使用せずに簡単な方法でそれを行う方法を理解できませんでした.

from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QHBoxLayout, QButtonGroup
import sys


class MainWindow(QWidget):

    def __init__(self):

        super().__init__()

        # Radio buttons
        self.group = QButtonGroup()

        self.b1 = QRadioButton()
        self.group.addButton(self.b1)
        self.b1.clicked.connect(lambda: self.radioButtonClicked())

        self.b2 = QRadioButton()
        self.group.addButton(self.b2)
        self.b2.clicked.connect(lambda: self.radioButtonClicked())

        # Layout
        self.layout = QHBoxLayout()
        self.layout.addWidget(self.b1)
        self.layout.addWidget(self.b2)
        self.setLayout(self.layout)


    def radioButtonClicked(self):
        if self.sender().isChecked():
            self.sender().setAutoExclusive(False)
            self.sender().setChecked(False) # This is not working, as it fires on the first click
            self.sender().setAutoExclusive(True)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()
4

3 に答える 3