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.