TUTORIAL

PyQt5 教程 - 單選按鈕

本教程通過示例介紹 PyQt5 QRadiobutton 控制元件,例如如何建立單選按鈕以及如何向單選按鈕 stateChanged 訊號新增 slot。

本頁內容

QRadiobutton 類似於 QCheckbox,除了你能有多個選擇,但你一次只能選擇一個。QRadiobutton 控制元件還具有文字標籤以及圓形單選按鈕。

PyQt5 QRadiobutton 單選基本示例

下面的程式碼詢問你居住的城市,並建立兩個單選按鈕供使用者選擇。使用者選擇一個單選按鈕後,它將在 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_())

PyQt5 QRadiobutton 單選按鈕基本示例

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

我們建立兩個單選按鈕 rbtn1 和 rbtn2。括號中的字串是圓形單選按鈕旁邊顯示的文字標籤。

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

每次選擇或取消選擇按鈕時,按鈕都會發出 toggled 訊號。onClicked 函式連線到兩個單選按鈕的 toggled 訊號。

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 QRadiobutton 的 setChecked 方法

QRadiobutton 在啟動後預設未選中。通過使用 setChecked() 方法,我們可以在初始化期間將單選按鈕的預設狀態更改為 Checked。

例如,我們將以下行新增到上面的示例程式碼中,以選中 New York 單選按鈕。

self.rbtn1.setChecked(True)

PyQt5 QRadiobutton 組

同一父視窗中的所有單選按鈕都在同一組中,這意味著即使 toggled 訊號連線到不同的函式,一次也只能選擇一個單選按鈕。

來自 QtWidgets 的 QButtonGroup 將選定的按鈕分組在一起,我們可以建立多個 QButtonGroup 例項來隔離不同組中的單選按鈕,以便可以在同一父視窗控制元件中檢查更多按鈕。

下面顯示了一個示例,要求使用者從兩組單選按鈕中選擇城市和州。

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 單選按鈕 QButtonGroup 組

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)

將相同組中的單選按鈕新增到相同的 QButtonGroup 中。