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. 总结

优点

  • 简单易用:通过选项卡快速切换不同的页面。

  • 灵活性高:支持动态添加和移除选项卡。

  • 可定制性强:通过样式表自定义选项卡的外观。

适用场景

  • 多页界面(如设置界面、数据展示界面)。

  • 动态加载内容(如文件编辑器、多任务管理)。

  • 自定义界面样式(如调整选项卡颜色、形状)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值