PyQt5 チュートリアル - ラジオボタン
QRadiobutton
は QCheckbox
に似ていますが、複数の選択肢がありますが、一度に選択できるのは 1つだけです。QRadiobutton
ウィジェットには、丸いラジオボタンと共にテキストラベルもあります。
PyQt5 QRadiobutton
の基本的な例
以下のコードは、あなたが住んでいる都市を尋ね、ユーザーが選択するための 2つのラジオボタンを作成します。ユーザーがラジオボタンのいずれかを選択すると、label テキストに表示されます。
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_())
self.rbtn1 = QRadioButton("New York")
self.rbtn2 = QRadioButton("Houston")
2つの radio ボタン rbtn1
と rbtn2
を作成します。括弧内の文字列は、丸いレイドボタンの横に表示されるテキストラベルです。
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
setChecked
メソッド
QRadiobutton
は、開始後、デフォルトではチェックされません。setChecked()
メソッドを使用して、初期化中にラジオボタンのデフォルトの状態を Checked
に変更できます。
たとえば、上の例のコードに次の行を追加して、ラジオボタン New York
をチェックします。
self.rbtn1.setChecked(True)
PyQt5 QRadiobutton
グループ
同じ親ウィンドウのすべてのラジオボタンは同じグループ内にあり、トグル
信号が異なる機能に接続されていても、一度に 1つのラジオボタンしか選択できないことを意味します。
QtWidgets
の QButtonGroup
は選択されたボタンをグループ化し、複数の 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_())
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
に追加されます。