PyQt5 チュートリアル - ラジオボタン

  1. PyQt5 QRadiobutton の基本的な例
  2. PyQt5 QRadiobuttonsetChecked メソッド
  3. PyQt5 QRadiobutton グループ

QRadiobuttonQCheckbox に似ていますが、複数の選択肢がありますが、一度に選択できるのは 1つだけです。QRadiobutton ウィジェットには、丸いラジオボタンと共にテキストラベルもあります。

PyQt5 QRadiobutton の基本的な例

以下のコードは、あなたが住んでいる都市を尋ね、ユーザーが選択するための 2つのラジオボタンを作成します。ユーザーがラジオボタンのいずれかを選択すると、label テキストに表示されます。

QRadiobutton Basic Example.py
import sys
from PyQt5.QtWidgets import (QLabel, QRadioButton, QPushButton, QVBoxLayout, QApplication, QWidget)

class basicRadiobuttonExample(QWidget):

    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        self.label = QLabel('Which city do you live in?')
        self.rbtn1 = QRadioButton('New York')
        self.rbtn2 = QRadioButton('Houston')
        self.label2 = QLabel("")
        
        self.rbtn1.toggled.connect(self.onClicked)
        self.rbtn2.toggled.connect(self.onClicked)

        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.rbtn1)
        layout.addWidget(self.rbtn2)
        layout.addWidget(self.label2)
        
        self.setGeometry(200, 200, 300, 150)

        self.setLayout(layout)
        self.setWindowTitle('PyQt5 Radio Button Example')

        

        self.show()

    def onClicked(self):
        radioBtn = self.sender()
        if radioBtn.isChecked():
            self.label2.setText("You live in " + radioBtn.text())

if __name__ == '__main__':    
    app = QApplication(sys.argv)
    ex = basicRadiobuttonExample()
    sys.exit(app.exec_())

PyQt5 QRadiobutton ラジオボタンの基本的な例

self.rbtn1 = QRadioButton('New York')
self.rbtn2 = QRadioButton('Houston')

2つの radio ボタン rbtn1rbtn2 を作成します。括弧内の文字列は、丸いレイドボタンの横に表示されるテキストラベルです。

self.rbtn1.toggled.connect(self.onClicked)
self.rbtn2.toggled.connect(self.onClicked)

ボタンは、ボタンが選択または選択解除されるたびに「トグル」信号を発します。onClicked 関数は、2つのラジオボタンの「トグル」信号に接続されます。

def onClicked(self):
    radioBtn = self.sender()
    if radioBtn.isChecked():
        self.label2.setText("You live in " + radioBtn.text())

self.sender() はシグナルを発するウィジェットを返し、QRadiobutton ウィジェットの「isChecked()」メソッドは、特定のボタンが選択されている場合は True、そうでない場合は False を返します。

isChecked() メソッドをチェックすることで、ラジオボタンのグループから選択された特定のラジオボタンを取得できます。

PyQt5 QRadiobutton ラジオボタンの基本的な例

PyQt5 QRadiobuttonsetChecked メソッド

QRadiobutton は、開始後、デフォルトではチェックされません。setChecked() メソッドを使用して、初期化中にラジオボタンのデフォルトの状態を Checked に変更できます。

たとえば、上の例のコードに次の行を追加して、ラジオボタン「New York」をチェックします。

self.rbtn1.setChecked(True)

PyQt5 QRadiobutton グループ

同じ親ウィンドウのすべてのラジオボタンは同じグループ内にあり、「トグル」信号が異なる機能に接続されていても、一度に 1つのラジオボタンしか選択できないことを意味します。

QtWidgetsQButtonGroup は選択されたボタンをグループ化し、複数の QButtonGroup インスタンスを作成してラジオボタンを異なるグループから分離し、同じ親ウィジェットでより多くのボタンをチェックできるようにします。

以下に、2つのグループのラジオボタンから市と州の両方を選択するようにユーザーに求める例を示します。

import sys
from PyQt5.QtWidgets import (QLabel, QRadioButton, 
                             QPushButton, QVBoxLayout, 
                             QApplication, QWidget, 
                             QButtonGroup)

class basicRadiobuttonExample(QWidget):

    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        self.label = QLabel('Which city do you live in?')
        self.rbtn1 = QRadioButton('New York')
        self.rbtn2 = QRadioButton('Houston')
        self.label2 = QLabel("")
        
        self.label3 = QLabel('Which state do you live in?')
        self.rbtn3 = QRadioButton('New York')
        self.rbtn4 = QRadioButton('Texas')
        self.label4 = QLabel("")
        
        self.btngroup1 = QButtonGroup()
        self.btngroup2 = QButtonGroup()
        
        self.btngroup1.addButton(self.rbtn1)
        self.btngroup1.addButton(self.rbtn2)
        self.btngroup2.addButton(self.rbtn3)
        self.btngroup2.addButton(self.rbtn4)
        
        self.rbtn1.toggled.connect(self.onClickedCity)
        self.rbtn2.toggled.connect(self.onClickedCity)
        
        self.rbtn3.toggled.connect(self.onClickedState)
        self.rbtn4.toggled.connect(self.onClickedState)        
        

        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.rbtn1)
        layout.addWidget(self.rbtn2)
        layout.addWidget(self.label2)
        
        layout.addWidget(self.label3)
        layout.addWidget(self.rbtn3)
        layout.addWidget(self.rbtn4)
        layout.addWidget(self.label4)
        
        self.setGeometry(200, 200, 300, 300)

        self.setLayout(layout)
        self.setWindowTitle('PyQt5 Radio Button Example')        

        self.show()

    def onClickedCity(self):
        radioBtn = self.sender()
        if radioBtn.isChecked():
            self.label2.setText("You live in " + radioBtn.text())
            
    def onClickedState(self):
        radioBtn = self.sender()
        if radioBtn.isChecked():
            self.label4.setText("You live in " + radioBtn.text())

if __name__ == '__main__':    
    app = QApplication(sys.argv)
    ex = basicRadiobuttonExample()
    sys.exit(app.exec_())

PyQt5 QRadiobutton Radiobutton QButtonGroup グループ

self.btngroup1 = QButtonGroup()
self.btngroup2 = QButtonGroup()

ラジオボタンを保持するために 2つのボタングループが作成されます。

self.btngroup1.addButton(self.rbtn1)
self.btngroup1.addButton(self.rbtn2)
self.btngroup2.addButton(self.rbtn3)
self.btngroup2.addButton(self.rbtn4)

同じグループ内のラジオボタンは同じ QButtonGroup に追加されます。

comments powered by Disqus