5.1.3选项卡:QTabWidget
通过单击各选项卡可以查看对应的页面。 如果在一个窗口中显示的控件很多,则可以先进行拆分,分别放置在不同页面的选项卡中。 但不同页面的选项卡中控件的名称不能相同。 常用方法及说明如下:
addTabO:添加选项卡
inserTab():插入选项卡
removeTab():删除选项卡
currentWidget():获取当前选项卡
currentIndex():获取当前选项卡的索引
setCurrentIndex():设置当前选项卡的索引
setCurrentWidget():设置当前选项卡
setTabPosition():设置选项卡的标题位置(QTabWidget.TabPosition.x): North:标题在北方,即上边(默认值)
South:标题在南方,即下边
West:标题在西方,即左边
East:标题在东方,即右边
setTabsClosable():设置是否可以独立关闭选项卡,True表示可以关闭,在每个选项卡旁边会有一个关闭按钮;False表示不可以关闭
setTabText():设置选项卡标题文本
tabText():获取指定选项卡的标题文本
【例5.3】QTabWidget选项卡测试,如下:
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QHBoxLayout, QTabWidget, QFormLayout, \
QLineEdit, QRadioButton, QCheckBox, QPushButton
class myTabWidget(QTabWidget):
def __init__(self):
super().__init__() # 调用父类QTabWidget的初始化方法
self.initUI() # 初始化UI界面
def initUI(self):
self.setGeometry(300, 300, 360, 160) # 设置窗口的位置和大小
self.setWindowTitle('QTabWidget测试') # 设置窗口的标题
self.setTabPosition(QTabWidget.TabPosition.North) # 设置选项卡的位置为上方
# 创建两个用于显示控件的QWidget对象
self.tabW1 = QWidget()
self.tabW2 = QWidget()
# 将两个QWidget对象作为选项卡添加到QTabWidget中
self.addTab(self.tabW1, '选项卡1')
self.addTab(self.tabW2, '选项卡2')
self.tabW1_UI() # 初始化选项卡1的UI界面
self.tabW2_UI() # 初始化选项卡2的UI界面(注意:这段代码在原始代码中并未给出)
def tabW1_UI(self):
fLayout = QFormLayout() # 创建一个表单布局对象
self.xm = QLineEdit() # 创建一个文本输入框用于输入姓名
self.xb1 = QRadioButton('男') # 创建一个单选按钮表示性别为男
self.xb2 = QRadioButton('女') # 创建一个单选按钮表示性别为女
self.xb1.setChecked(True) # 默认选中性别为男
self.csny = QLineEdit() # 创建一个文本输入框用于输入出生年月
btn = QPushButton("确定") # 创建一个按钮,标签为“确定”
# 为按钮的点击事件绑定处理函数
btn.clicked.connect(self.clickedFunc)
hLay = QHBoxLayout() # 创建一个水平布局对象
hLay.addWidget(self.xb1) # 将性别为男的单选按钮添加到水平布局中
hLay.addWidget(self.xb2) # 将性别为女的单选按钮添加到水平布局中
# 将控件添加到表单布局中
fLayout.addRow('姓名: ', self.xm)
fLayout.addRow('性别: ', hLay)
fLayout.addRow('出生年月: ', self.csny)
fLayout.addRow(' ', btn) # 注意这里添加了一个空格作为占位符,使得按钮能对齐
self.setTabText(0, '基本信息') # 修改第1个选项卡的标题为“基本信息”
self.tabW1.setLayout(fLayout) # 为选项卡1设置布局为刚刚创建的表单布局
def tabW2_UI(self):
# 创建一个水平布局对象
hLay = QHBoxLayout()
# 创建三个复选框,分别代表不同的编程语言
self.cb1 = QCheckBox('C++')
self.cb2 = QCheckBox('Java')
self.cb3 = QCheckBox('C#')
# 默认选中C++复选框
self.cb1.setChecked(True)
# 将复选框添加到水平布局中
hLay.addWidget(self.cb1)
hLay.addWidget(self.cb2)
hLay.addWidget(self.cb3)
# 修改第2个选项卡的标题为“编程语言”
self.setTabText(1, '编程语言')
# 为选项卡2设置布局为刚刚创建的水平布局
self.tabW2.setLayout(hLay)
def clickedFunc(self):
# 当“确定”按钮被点击时,执行此函数
# 打印姓名输入框中的内容
print(self.xm.text())
# 打印出生年月输入框中的内容
print(self.csny.text())
# 判断并打印性别单选按钮的状态
if self.xb1.isChecked():
print(self.xb1.text())
else:
print(self.xb2.text())
# 判断并打印编程语言复选框的状态
if self.cb1.isChecked():
print(self.cb1.text())
if self.cb2.isChecked():
print(self.cb2.text())
if self.cb3.isChecked():
print(self.cb3.text())
# 主程序入口
if __name__ == '__main__':
# 创建QApplication对象,它是每个PyQt6应用程序的必需对象
app = QApplication(sys.argv)
# 创建myTabWidget类的实例
w = myTabWidget()
# 显示窗口
w.show()
# 进入应用程序的主事件循环
sys.exit(app.exec())
实现一个带有多个选项卡的窗口应用程序。每个选项卡中包含不同的用户界面(UI)元素,允许用户进行交互操作。以下是关于这段代码的功能、使用的控件、布局和关键语句的详细解释:
功能
- 创建多选项卡窗口:通过
myTabWidget
类,创建了一个包含多个选项卡的窗口。 - 选项卡UI定制:
tabW2_UI
方法用于定制第二个选项卡的UI,包括添加复选框控件。 - 用户交互响应:
clickedFunc
方法定义了当用户点击某个按钮时应该执行的操作,例如打印输入框和复选框的状态。
控件
- QTabWidget:用于创建多选项卡窗口。
- QHBoxLayout:水平布局管理器,用于在选项卡中水平排列控件。
- QCheckBox:复选框控件,用于让用户从多个选项中选择一个或多个。
- QLineEdit(未在提供的代码片段中显示,但提到了
self.xm
和self.csny
):文本输入框控件,用于用户输入文本。 - QRadioButton(未在提供的代码片段中显示,但提到了
self.xb1
和self.xb2
):单选按钮控件,用于让用户从多个选项中选择一个。 - QPushButton(未在提供的代码片段中显示,但提到了点击事件的响应):按钮控件,用于触发用户操作。
布局
- 水平布局(QHBoxLayout):用于在第二个选项卡中水平排列三个复选框控件。
关键语句
- 创建选项卡和布局:
hLay = QHBoxLayout()
:创建水平布局对象。self.setTabText(1, '编程语言')
:设置第二个选项卡的标题。self.tabW2.setLayout(hLay)
:为第二个选项卡设置布局。
- 添加控件到布局:
hLay.addWidget(self.cbX)
:将复选框控件添加到水平布局中(X代表1、2、3)。
- 用户交互响应:
if self.cbX.isChecked():
:检查复选框是否被选中。print(self.cbX.text())
:打印复选框的文本内容。
- 应用程序启动:
app = QApplication(sys.argv)
:创建应用程序对象。w = myTabWidget()
:创建myTabWidget
窗口实例。w.show()
:显示窗口。sys.exit(app.exec())
:进入应用程序的主事件循环。
这段代码是一个基本的PyQt6应用程序示例,展示了如何创建窗口、添加控件、设置布局以及响应用户交互事件。