当前位置: 首页 > article >正文

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

优点

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

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

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

适用场景

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

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

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


http://www.kler.cn/a/541430.html

相关文章:

  • 现代前端开发的演进与未来趋势:从工具革新到技术突破
  • 练习题(2.10)
  • 【分布式理论7】分布式调用之:服务间的(RPC)远程调用
  • apache-poi导出excel数据
  • 【kafka实战】06 kafkaTemplate java代码使用示例
  • 前端 CSS 动态设置样式::class、:style 等技巧详解
  • 【STM32H743】【RT-Thread Studio】RTC功能(基于BSP工程可一键开启)
  • 嵌入式linux系统中VIM编辑工具用法与GCC参数详解
  • 记录一次报错:spring security 403报错
  • HIVE如何注册UDF函数
  • 使用 Python/Boto/Django 实现 S3 直接上传
  • Django操作指令大集合说明
  • electron中调用C++
  • 视频编解码标准总结
  • 1.15 联邦学习
  • 《Wiki.js知识库部署实践 + CNB Git数据同步方案解析》
  • AI算力的摆脱有点像发动机汽车变电动车
  • 第22章 Balking设计模式(Java高并发编程详解:多线程与系统设计)
  • 牛客周赛Round 80 —— 举手赢棋 python 补题 + 题解
  • 数据结构之八大排序算法
  • Visual Studio 2022 中使用 Google Test
  • k8s:pod被kill,显示command terminated with exit code 137
  • Python Pandas(7):Pandas 数据清洗
  • UDP小实验
  • #渗透测试#批量漏洞挖掘#某成科信票务管理系统 TicketManager SQL注入漏洞
  • MapReduce简单应用(三)——高级WordCount