Pyqt的QTabWidget组件
1、案例
动态加载tab页面
import sys
from PyQt6.QtWidgets import *
import qt_material
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.setWindowTitle("Login")
self.resize(800, 600)
# 存放已加载的页面id
self.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):
pass
def 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. 总结
优点
-
简单易用:通过选项卡快速切换不同的页面。
-
灵活性高:支持动态添加和移除选项卡。
-
可定制性强:通过样式表自定义选项卡的外观。
适用场景
-
多页界面(如设置界面、数据展示界面)。
-
动态加载内容(如文件编辑器、多任务管理)。
-
自定义界面样式(如调整选项卡颜色、形状)。