メインコンテンツまでスキップ

基本 Widget を使ってみる(2):RadioButton

複数の選択肢からなにかを選ぶときに使用するのが RadioButton。
その基本的な使い方を解説。

完成した UI はこんな感じ。
選択した CheckBox の文字を、「SelectCheck」ボタンを押すとプリントしてくれます。

使用している ui ファイルは https://snippets.cacher.io/snippet/82070300e6a8c34b8f12 こちら。

基本的な使い方

まず、使用する Button を「ButtonGroup」でまとめてから使用します。

        self.grpA = QtWidgets.QButtonGroup()
self.grpA.addButton(self.ui.radioButton_4, 1)
self.grpA.addButton(self.ui.radioButton_5, 2)
self.grpA.addButton(self.ui.radioButton_6, 3)
self.grpA.button(1).setChecked(True)

この ButtonGroup は AbstractButton クラスを継承して作成されている Button を
グルーピングすることができます。
使い方は、上のコードのように、addButton に対して Button のオブジェクトをセットするだけ。
その時に、アクセス用の ID を指定しておきます。

以降は、ButtonGroup.button( id )で、
Group に含まれる Button のオブジェクトの取得を行うことができる。

そして、取得方法は

self.grpA.checkedButton()

ButtonGroup の checkedButton で選択中の Button のオブジェクトを
取得することができます。

それ以外の使い方

ButtonGroup の Signal の中には、クリックしたときに
クリックしたボタンを取得する関数があります。

self.grpA.buttonClicked.connect(self.checkButtonA)

使い方は、このようなシグナルを作成し、

    def checkButtonA(self,btn):
print(btn.text())

スロットの関数には Button のオブジェクトを受け取るための引数を
用意しておきます。
こうしておくと、Button をクリックしたときに
今選択した Button オブジェクトを受け取って、何かしらの処理をはさむことができます。

同様な処理で buttonPressed buttonReleased などがありますが
使い方は同じなので、用途に応じて差し替えます。

参考の Help は ButtonGroup
https://doc.qt.io/qtforpython/PySide2/QtWidgets/QButtonGroup.html#PySide2.QtWidgets.PySide2.QtWidgets.QButtonGroup.checkedButton RadioButton
https://doc.qt.io/qtforpython/PySide2/QtWidgets/QRadioButton.html
ただし、RadioButton はほぼ AbstractButton を継承したものなので
https://doc.qt.io/qtforpython/PySide2/QtWidgets/QAbstractButton.html#PySide2.QtWidgets.QAbstractButton
Button に関数は、AbstractButton 側のヘルプを参照すると良いです。