1、案例
动态加载tab页面
import sysfrom PyQt6.QtWidgets import *
import qt_materialclass Window(QWidget):def __init__(self):super(Window, self).__init__()self.setWindowTitle("Login")self.resize(800, 600)# 存放已加载的页面idself.tab_index_set = set()self.init_widget() # 设置组件self.init_signal() # 设置信号self.init_style() # 样式self.init_layout() # 设置布局def init_widget(self):self.tab = QTabWidget()self.widget1 = QWidget()self.widget2 = QWidget()self.widget3 = QWidget()self.tab.addTab(self.widget1, '登陆') # 默认页面self.tab.addTab(self.widget2, '功能1') # 动态加载self.tab.addTab(self.widget3, '功能2') # 动态加载self.label1 = QLabel("*登陆*")self.label2 = QLabel("*功能1*")self.label3 = QLabel("*功能2*")def init_signal(self):self.tab.currentChanged.connect(self.show_tab) # 动态加载tab页面def init_style(self):passdef init_layout(self):self.tab_index_set.add(0) # 默认加载第一页main_layout = QHBoxLayout()h_layout1 = QHBoxLayout()h_layout1.addStretch() # 添加弹簧 调整布局h_layout1.addWidget(self.label1)h_layout1.addStretch()self.widget1.setLayout(h_layout1)main_layout.addWidget(self.tab)self.setLayout(main_layout)def show_tab(self):# 动态加载tab页面index = self.tab.currentIndex()if index not in self.tab_index_set:print("加载中...")if index == 1:v_layout2 = QVBoxLayout()v_layout2.addWidget(self.label2)self.widget2.setLayout(v_layout2)elif index == 2:v_layout3 = QVBoxLayout()v_layout3.addWidget(self.label3)self.widget3.setLayout(v_layout3)self.tab_index_set.add(index)else:print("页面已加载!")if __name__ == "__main__":app = QApplication(sys.argv)tabWidget = Window()qt_material.apply_stylesheet(app, 'dark_yellow.xml')tabWidget.show()sys.exit(app.exec())
2、常用方法
2.1 构造函数
-
QTabWidget(parent: QWidget = None)
:创建一个空的QTabWidget
。
2.2 添加和移除选项卡
-
addTab(widget: QWidget, label: str) -> int
:添加一个选项卡,返回选项卡的索引。 -
insertTab(index: int, widget: QWidget, label: str) -> int
:在指定位置插入一个选项卡。 -
removeTab(index: int)
:移除指定索引的选项卡。
2.3 设置和获取当前选项卡
-
setCurrentIndex(index: int)
:设置当前显示的选项卡。 -
currentIndex() -> int
:获取当前显示的选项卡的索引。 -
currentWidget() -> QWidget
:获取当前显示的选项卡中的控件。
2.4 设置选项卡位置
-
setTabPosition(position: QTabWidget.TabPosition)
:设置选项卡的位置(上方、下方、左侧、右侧)。-
QTabWidget.TabPosition.North
:选项卡在上方(默认)。 -
QTabWidget.TabPosition.South
:选项卡在下方。 -
QTabWidget.TabPosition.East
:选项卡在右侧。 -
QTabWidget.TabPosition.West
:选项卡在左侧。
-
2.5 设置选项卡样式
-
setTabShape(shape: QTabWidget.TabShape)
:设置选项卡的形状(矩形或圆角)。-
QTabWidget.TabShape.Rounded
:圆角选项卡(默认)。 -
QTabWidget.TabShape.Triangular
:三角形选项卡。
-
2.6 设置图标和工具提示
-
setTabIcon(index: int, icon: QIcon)
:为指定选项卡设置图标。 -
setTabToolTip(index: int, toolTip: str)
:为指定选项卡设置工具提示。
2.7 信号
-
currentChanged(index: int)
:当当前选项卡发生变化时触发。 -
tabCloseRequested(index: int)
:当用户请求关闭选项卡时触发。
3. 总结
优点
-
简单易用:通过选项卡快速切换不同的页面。
-
灵活性高:支持动态添加和移除选项卡。
-
可定制性强:通过样式表自定义选项卡的外观。
适用场景
-
多页界面(如设置界面、数据展示界面)。
-
动态加载内容(如文件编辑器、多任务管理)。
-
自定义界面样式(如调整选项卡颜色、形状)。