PyQt - QRadioButton 控制元件



QRadioButton 類物件呈現一個帶有文字標籤的可選擇按鈕。當用戶需要從選項列表中選擇一個選項時,通常會使用它。此控制元件由一個小圓形按鈕表示,可以切換為開啟(選中)或關閉(未選中)狀態。此類派生自 QAbstractButton 類。

pyqt qradiobutton inheritance

QRadioButton 自動互斥行為

預設情況下,單選按鈕是自動互斥的。因此,父視窗中一次只能選擇一個單選按鈕。如果選擇了一個,則先前選中的按鈕將自動取消選中。單選按鈕也可以放在 QGroupBoxQButtonGroup 中,以便在父視窗上建立多個可選擇欄位。

訊號

每當 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()

輸出

以上程式碼產生以下輸出:

qradiobuttonX widget output
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())

輸出

以上程式碼產生以下輸出:

pyqt qradiobutton grouping example
廣告

© . All rights reserved.