分组框:QGroupBox
GroupBox称为分组框控件,属于QGroupBox类,为其他控件提供分组容器,以便细分窗口的功能。把部分单选按钮加入其中,它们就形成一个组,该组中的单选按钮只能一个被选中。 GroupBox常用方法及说明如下:
setAlignment():设置对齐方式,有水平和垂直这两种。
setTitle():设置分组标题
setFlat():设置是否以扁平样式显示
【例5.2】采用QGroupBox将性别和专业分成2个单选分组,如下:
import sys # 导入Python的sys模块,用于获取命令行参数和退出程序
from PyQt6.QtWidgets import QApplication, QWidget, QGroupBox, QRadioButton, QHBoxLayout, \
QVBoxLayout # 导入PyQt6库中的相关类,用于创建图形用户界面
class MyWidget(QWidget): # 定义一个继承自QWidget的自定义类,用于创建窗口部件
def __init__(self): # 初始化方法,当创建MyWidget对象时调用
super(MyWidget, self).__init__() # 调用父类QWidget的初始化方法
# 创建四个单选按钮,分别代表不同的专业选项
self.rbJSJ = QRadioButton('计算机', self) # 创建标签为“计算机”的单选按钮
self.rbRJGC = QRadioButton('软件工程', self) # 创建标签为“软件工程”的单选按钮
self.rbTXGC = QRadioButton('通信工程', self) # 创建标签为“通信工程”的单选按钮
self.rbRGZN = QRadioButton('人工智能', self) # 创建标签为“人工智能”的单选按钮
# 将四个单选按钮添加到列表中
self.list = [self.rbJSJ, self.rbRJGC, self.rbTXGC, self.rbRGZN]
# 将每个单选按钮的clicked信号连接到rbListFunc槽函数
[rb.clicked.connect(self.rbListFunc) for rb in self.list]
# 创建两个单选按钮,分别代表性别选项
self.rbNan = QRadioButton('男', self) # 创建标签为“男”的单选按钮
self.rbNv = QRadioButton('女', self) # 创建标签为“女”的单选按钮
# 将“女”单选按钮的toggled信号连接到rbNxxFunc槽函数
self.rbNv.toggled.connect(self.rbNxxFunc)
# 创建两个水平布局管理器
self.hLayout1 = QHBoxLayout() # 第一个水平布局
self.hLayout2 = QHBoxLayout() # 第二个水平布局
# 创建垂直布局管理器
self.vLayout = QVBoxLayout() # 垂直布局
# 初始化窗口部件的布局
self.layout_init()
def layout_init(self):
# 将性别单选按钮添加到第一个水平布局中
self.hLayout1.addWidget(self.rbNan)
self.hLayout1.addWidget(self.rbNv)
# 将专业单选按钮添加到第二个水平布局中
self.hLayout2.addWidget(self.rbJSJ)
self.hLayout2.addWidget(self.rbRJGC)
self.hLayout2.addWidget(self.rbTXGC)
self.hLayout2.addWidget(self.rbRGZN)
# 创建两个组框,分别用于包含性别和专业单选按钮
self.gBox1 = QGroupBox('性别', self) # 性别组框
self.gBox2 = QGroupBox('专业', self) # 专业组框
# 设置组框的布局
self.gBox1.setLayout(self.hLayout1) # 性别组框使用第一个水平布局
self.gBox2.setLayout(self.hLayout2) # 专业组框使用第二个水平布局
# 将组框添加到垂直布局中
self.vLayout.addWidget(self.gBox1)
self.vLayout.addWidget(self.gBox2)
# 默认选中“女”和“人工智能”单选按钮
self.rbNv.setChecked(True)
self.rbRGZN.setChecked(True)
# 设置窗口部件的布局为垂直布局
self.setLayout(self.vLayout)
def rbListFunc(self):
# 当任何一个专业单选按钮被点击时调用该函数
for rb in self.list:
if rb.isChecked(): # 检查哪个单选按钮被选中
print(rb.text()) # 打印被选中单选按钮的标签
def rbNxxFunc(self):
# 当性别单选按钮的状态发生变化时调用该函数
if self.rbNan.isChecked(): # 如果“男”单选按钮被选中
print("男")
else: # 否则
print("女")
if __name__ == '__main__':
# 程序入口
app = QApplication(sys.argv) # 创建应用程序对象
w = MyWidget()
w.show()# 显示窗口部件
sys.exit(app.exec())# 进入应用程序的主事件循环,等待用户交互
在上面的两段代码中,我们主要看到的是一个基于PyQt6的图形用户界面(GUI)应用程序的布局和控件设置。以下是布局、控件和关键语句的详细解释:
布局(Layout)
-
QHBoxLayout:水平布局管理器,用于将控件水平排列。在这个例子中,有两个
QHBoxLayout
实例,self.hLayout1
用于性别单选按钮,self.hLayout2
用于专业单选按钮。 -
QVBoxLayout:垂直布局管理器,用于将控件垂直排列。
self.vLayout
是一个垂直布局,它将性别组框和专业组框垂直排列。
控件(Widgets)
-
QWidget:所有用户界面对象的基类。在这里,
MyWidget
类继承自QWidget
,用于创建自定义的窗口部件。 -
QRadioButton:单选按钮控件。
self.rbJSJ
、self.rbRJGC
、self.rbTXGC
、self.rbRGZN
是代表不同专业的单选按钮;self.rbNan
和self.rbNv
是代表性别的单选按钮。 -
QGroupBox:组框控件,用于将相关的控件组合在一起,并带有标题。
self.gBox1
和self.gBox2
分别是性别和专业组框。
关键语句
- 信号与槽的连接:
rb.clicked.connect(self.rbListFunc) for rb in self.list
:将每个专业单选按钮的clicked
信号连接到rbListFunc
槽函数。当任何一个专业单选按钮被点击时,rbListFunc
将被调用。self.rbNv.toggled.connect(self.rbNxxFunc)
:将性别单选按钮“女”的toggled
信号连接到rbNxxFunc
槽函数。当这个单选按钮的状态发生变化时(被选中或取消选中),rbNxxFunc
将被调用。
- 布局设置:
self.gBox1.setLayout(self.hLayout1)
和self.gBox2.setLayout(self.hLayout2)
:将水平布局设置到性别和专业组框中。self.vLayout.addWidget(self.gBox1)
和self.vLayout.addWidget(self.gBox2)
:将组框添加到垂直布局中。self.setLayout(self.vLayout)
:设置MyWidget
的布局为垂直布局。
- 控件的初始状态:
self.rbNv.setChecked(True)
和self.rbRGZN.setChecked(True)
:默认选中“女”和“人工智能”单选按钮。
- 窗口部件的显示:
w.show()
:显示MyWidget
实例化的窗口部件。
- 应用程序的执行:
app = QApplication(sys.argv)
:创建应用程序对象。sys.exit(app.exec())
:启动应用程序的主事件循环,并在应用程序结束时退出程序。
这些关键语句共同协作,创建了一个简单的图形用户界面,其中包含两组单选按钮,分别用于选择性别和专业,并处理用户的交互事件。