- PyQt 教程
- PyQt - 首頁
- PyQt - 簡介
- PyQt - 環境搭建
- PyQt - Hello World
- PyQt - 主要類
- PyQt - 使用 Qt Designer
- PyQt - 元物件
- PyQt 訊號與槽
- PyQt - 訊號和槽
- PyQt - 支援和訊號
- PyQt - 未繫結和繫結訊號
- PyQt - 使用 PyQtSignal 建立新訊號
- PyQt - 連線、斷開和發射訊號
- PyQt - 槽裝飾器
- PyQt - 槽連線
- PyQt 佈局
- PyQt - 佈局管理
- PyQt - QBoxLayout
- PyQt - QGridLayout
- PyQt - QFormLayout
- PyQt - QHBoxLayout
- PyQt - QVBoxLayout
- PyQt - QStackedLayout
- PyQt - QGraphicsGridLayout
- PyQt - QGraphicsAnchorLayout
- PyQt - QGraphicsLayout
- PyQt - QGraphicsLinearLayout
- PyQt 基本控制元件
- PyQt - 基本控制元件
- PyQt - QLabel 控制元件
- PyQt - QLineEdit 控制元件
- PyQt - QPushButton 控制元件
- PyQt - QRadioButton 控制元件
- PyQt - QCheckBox 控制元件
- PyQt - QComboBox 控制元件
- PyQt - QSpinBox 控制元件
- PyQt - QMessageBox
- PyQt - QDialogButtonBox 控制元件
- PyQt - QFontComboBox 控制元件
- PyQt - QDoubleSpinBox 控制元件
- PyQt - QToolBox 控制元件
- PyQt - QDialog 類
- PyQt - QMessageBox
- PyQt - 多文件介面
- PyQt - 拖放操作
- PyQt 繪圖 API
- PyQt - 繪圖 API
- PyQt 資料庫
- PyQt - 資料庫處理
- PyQt 核心知識
- PyQt - BrushStyle 常量
- PyQt - QClipboard
- PyQt - QPixmap 類
- PyQt 有用資源
- PyQt - 快速指南
- PyQt - 有用資源
- PyQt - 討論
PyQt - QRadioButton 控制元件
QRadioButton 類物件呈現一個帶有文字標籤的可選擇按鈕。當用戶需要從選項列表中選擇一個選項時,通常會使用它。此控制元件由一個小圓形按鈕表示,可以切換為開啟(選中)或關閉(未選中)狀態。此類派生自 QAbstractButton 類。
QRadioButton 自動互斥行為
預設情況下,單選按鈕是自動互斥的。因此,父視窗中一次只能選擇一個單選按鈕。如果選擇了一個,則先前選中的按鈕將自動取消選中。單選按鈕也可以放在 QGroupBox 或 QButtonGroup 中,以便在父視窗上建立多個可選擇欄位。
訊號
每當 QRadioButton 切換狀態時,它都會發出 toggled() 訊號。可以將此訊號連線到觸發操作,以響應按鈕狀態的變化。我們還可以使用 isChecked() 方法來確定特定按鈕當前是否已選中。
文字和圖示
與其他類似按鈕的控制元件(如 QPushButton)類似,QRadioButton 可以同時顯示文字和可選圖示。文字內容可以在初始化期間或使用 setText() 方法動態設定。還可以為文字指定快捷鍵以實現輔助功能。
QRadioButton 類的常用方法
以下列出的是 QRadioButton 類中最常用的方法。
| 序號 | 方法及描述 |
|---|---|
| 1 |
setChecked() 更改單選按鈕的狀態 |
| 2 |
setText() 設定與按鈕關聯的標籤 |
| 3 |
text() 檢索按鈕的標題 |
| 4 |
isChecked() 檢查按鈕是否已選中 |
與 QRadioButton 物件關聯的預設訊號是 toggled(),儘管也可以實現從 QAbstractButton 類繼承的其他訊號。
示例
這裡在頂級視窗上構造了兩個互斥的單選按鈕。
透過語句將 b1 的預設狀態設定為選中狀態:
Self.b1.setChecked(True)
兩個按鈕的 toggled() 訊號都連線到 btnstate() 函式。使用 lambda 可以將訊號源作為引數傳遞給函式。
self.b1.toggled.connect(lambda:self.btnstate(self.b1)) self.b2.toggled.connect(lambda:self.btnstate(self.b2))
btnstate() 函式檢查發出 toggled() 訊號的按鈕的狀態。
import sys
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import QWidget,QApplication, QRadioButton,QHBoxLayout
class Radiodemo(QWidget):
def __init__(self, parent = None):
super(Radiodemo, self).__init__(parent)
layout = QHBoxLayout()
self.b1 = QRadioButton("Button1")
self.b1.setChecked(True)
self.b1.toggled.connect(lambda:self.btnstate(self.b1))
layout.addWidget(self.b1)
self.b2 = QRadioButton("Button2")
self.b2.toggled.connect(lambda:self.btnstate(self.b2))
layout.addWidget(self.b2)
self.setLayout(layout)
self.setWindowTitle("RadioButton demo")
def btnstate(self,b):
if b.text() == "Button1":
if b.isChecked() == True:
print (b.text()+" is selected")
else:
print (b.text()+" is deselected")
if b.text() == "Button2":
if b.isChecked() == True:
print (b.text()+" is selected")
else:
print (b.text()+" is deselected")
def main():
app = QApplication(sys.argv)
ex = Radiodemo()
ex.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
輸出
以上程式碼產生以下輸出:
Button1 is deselected Button2 is selected Button2 is deselected Button1 is selected
示例:分組單選按鈕
在下面的示例中,我們將使用 QButtonGroup 建立一組單選按鈕,以在每個組內強制執行互斥選擇。
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QRadioButton, QButtonGroup
class RadioButtonsGroupExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.group1 = QButtonGroup()
self.group2 = QButtonGroup()
self.radio_button1 = QRadioButton("Option 1")
self.radio_button2 = QRadioButton("Option 2")
self.radio_button3 = QRadioButton("Option 3")
self.radio_button4 = QRadioButton("Option 4")
layout.addWidget(self.radio_button1)
layout.addWidget(self.radio_button2)
layout.addWidget(self.radio_button3)
layout.addWidget(self.radio_button4)
self.group1.addButton(self.radio_button1)
self.group1.addButton(self.radio_button2)
self.group2.addButton(self.radio_button3)
self.group2.addButton(self.radio_button4)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = RadioButtonsGroupExample()
ex.show()
sys.exit(app.exec())
輸出
以上程式碼產生以下輸出: