4.2.5单选按钮:QRadioButton
单选按钮属于QRadioButton 类,继承自 QAbstractButton 类。它提供了一组可供选择的包含文本标签按钮,用户可以选择其中一个选项。 单选钮是一种开关按钮,可以切换为开或者关,即checked或者unchecked。 QRadioButton 类中的常用方法如下:
setCheckable(逻辑值):设置按钮是否已经被选中,可以改变单选钮的选中状态,如果设置为True,则表示单选钮将保持已点击和释放状态
setChecked(逻辑值):返回单选钮的状态。返回值为True或False
isChecked():设置单选钮的显示文本
text():返回单选钮的显示文本
【例4.6】QRadioButton 单选按钮测试,测试如下:
import sys # 导入Python的系统模块,用于访问与Python解释器交互或与其运行的环境交互的一些变量和函数。
from PyQt6.QtWidgets import * # 从PyQt6.QtWidgets模块中导入所有类。PyQt6是一个用于创建图形用户界面(GUI)的Python库。
class MyWidget(QWidget): # 定义一个名为MyWidget的类,它继承自QWidget类。QWidget是所有用户界面对象的基类。
def __init__(self, parent=None): # 定义MyWidget类的初始化方法,parent参数默认为None。
super(MyWidget, self).__init__(parent) # 调用父类QWidget的初始化方法,传入parent参数。
self.setWindowTitle("RadioButton测试") # 设置窗口的标题为"RadioButton测试"。
self.rb1 = QRadioButton("南京大学") # 创建一个QRadioButton对象,其显示的文本为"南京大学",并将其赋值给self.rb1。
self.rb1.setChecked(True) # 设置self.rb1(即"南京大学"这个单选按钮)为选中状态。
self.rb1.toggled.connect(
lambda: self.rbFunc(self.rb1)) # 当self.rb1的状态发生变化时(即被选中或取消选中),调用self.rbFunc方法并传入self.rb1作为参数。
self.rb2 = QRadioButton("东南大学") # 创建第二个QRadioButton对象,文本为"东南大学",并赋值给self.rb2。
self.rb2.toggled.connect(lambda: self.rbFunc(self.rb2)) # 为self.rb2也设置状态变化时的回调函数。
self.rb3 = QRadioButton("南京师范大学") # 创建第三个QRadioButton对象,文本为"南京师范大学",并赋值给self.rb3。
self.rb3.toggled.connect(lambda: self.rbFunc(self.rb3)) # 为self.rb3也设置状态变化时的回调函数。
hLayout = QHBoxLayout() # 创建一个水平布局对象,并赋值给hLayout。
hLayout.addWidget(self.rb1) # 将self.rb1(即"南京大学"单选按钮)添加到水平布局中。
hLayout.addWidget(self.rb2) # 将self.rb2(即"东南大学"单选按钮)添加到水平布局中。
hLayout.addWidget(self.rb3) # 将self.rb3(即"南京师范大学"单选按钮)添加到水平布局中。
self.setLayout(hLayout) # 将MyWidget的布局设置为刚刚创建的水平布局hLayout。
def rbFunc(self, rb): # 定义一个名为rbFunc的方法,它接受一个参数rb(代表一个单选按钮)。
if rb.isChecked() == True: # 判断传入的单选按钮rb是否被选中。
print(rb.text()) # 如果被选中,则打印该单选按钮的文本内容。
if __name__ == '__main__': # 判断这个脚本是否作为主程序运行,而不是被其他脚本导入。
app = QApplication(sys.argv) # 创建一个QApplication对象,这是所有PyQt应用程序都需要的。
w = MyWidget() # 创建一个MyWidget对象,即我们的窗口。
w.show() # 显示窗口。
sys.exit(app.exec()) # 进入应用程序的主循环,等待用户的交互操作。当应用程序结束时,返回状态码并退出。
这段代码主要实现了一个简单的窗口应用程序,其中包含了三个单选按钮(QRadioButton),这些按钮被放置在一个水平布局(QHBoxLayout)中。
以下是代码中使用的布局和控件:
-
布局(Layout):
QHBoxLayout
: 这是一个水平布局,它会将其包含的控件从左到右水平排列。
-
控件(Widgets):
QWidget
: 这是所有用户界面对象的基类。QApplication
: 每一个PyQt6应用程序都需要一个QApplication对象。它管理应用程序级别的资源,比如初始化GUI环境。QRadioButton
: 单选按钮控件,用户可以通过点击来选择或取消选择。
说明:
1. 因为三个单选按钮在一个布局中,所以选择其中一个。初试第一个单选按钮选中:
self.rbl.setChecked(True)
2.每个单选按钮的toggle信号均与槽函数rbFunc连接。使用lambda的方式源信号传递给槽函数,将单选按钮作为参数。
rbFunc函数检查单选按钮的状态,可获得选中的单选按钮。
关键语句的解释:
self.setWindowTitle("RadioButton测试")
: 设置窗口的标题为"RadioButton测试"。self.rb1 = QRadioButton ("南京大学")
: 创建一个新的QRadioButton控件,其文本为"南京大学"。self.rb1.setChecked(True)
: 将"南京大学"这个单选按钮设置为默认选中状态。self.rb1.toggled.connect(lambda:self.rbFunc(self.rb1))
: 当"南京大学"这个单选按钮的状态发生变化(被选中或取消选中)时,会调用rbFunc
函数,并将该按钮作为参数传入。hLayout.addWidget(self.rb1)
: 将"南京大学"这个单选按钮添加到水平布局中。self.setLayout(hLayout)
: 将窗口的布局设置为前面创建的水平布局。def rbFunc(self,rb)
: 这是一个槽函数,当任何一个单选按钮的状态发生变化时,都会被调用。如果传入的单选按钮处于选中状态,则打印出该按钮的文本。app = QApplication(sys.argv)
: 创建一个QApplication对象,它是每一个PyQt6应用程序都需要的。w=MyWidget()
: 创建一个MyWidget对象,即我们自定义的窗口。w.show()
: 显示窗口。sys.exit(app.exec())
: 进入应用程序的主事件循环,等待用户交互。当用户关闭窗口时,app.exec()
返回,然后程序退出。
整体来说,这段代码的功能是创建一个窗口,窗口中包含三个水平排列的单选按钮,分别代表不同的大学。当用户点击任何一个单选按钮时,会在控制台输出该按钮的文本。