Pyqt的QTabWidget组件

server/2025/2/11 20:14:05/

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

优点

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

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

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

适用场景

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

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

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


http://www.ppmy.cn/server/166845.html

相关文章

ubuntu中如何在vscode的终端目录后显示(当前的git分支名) 实测有用

效果展示 配置过程: 在 Ubuntu 中,如果你想在 VS Code 的终端提示符后显示当前的 Git 分支名,可以通过修改 Shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)来实现。以下是具体步骤: 1. 确定使用的 Shell 首…

鸿蒙HarmonyOS NEXT开发:优化复杂UI页面的性能——自定义组件冻结(freezeWhenInactive属性)

文章目录 一、自定义组件冻结1、freezeWhenInactive 二、当前支持的场景1、页面路由2、TabContent3、Navigation4、组件复用 三、限制条件 一、自定义组件冻结 自定义组件冻结功能专为优化复杂UI页面的性能而设计,尤其适用于包含多个页面栈、长列表或宫格布局的场景…

AF3 ExponentialMovingAverage类解读

AlphaFold3 的 ExponentialMovingAverage (EMA) 类,用于维护神经网络模型参数的指数加权移动平均。它可以在训练过程中对模型的参数进行平滑处理,以减缓参数更新的波动,帮助提升模型的泛化能力。 主要功能 EMA 通过对每个参数的移动平均来稳定模型的训练过程。在每一步,参…

【安全帽头盔检测】基于YOLOV11+pytorch+Flask+SpringBoot+Vue+MySQL的安全帽头盔检测识别系统

前言 本系统是一个完整的基于YOLOV11pytorchFlaskSpringBootVueMySQL的安全帽头盔检测识别系统。 可使用YOLOV1-YOLOV11的任意模型进行目标检测。可以检测图片、视频、摄像头三种方式。能够检测出是否佩戴安全帽或头盔。可应用于工地施工现场、工厂安全检查、电瓶车头盔佩戴等…

C# OpenCV机器视觉:对位贴合

在热闹非凡的手机维修街上,阿强开了一家小小的手机贴膜店。每天看着顾客们自己贴膜贴得歪歪扭扭,不是膜的边缘贴不整齐,就是里面充满了气泡,阿强心里就想:“要是我能有个自动贴膜的神器,那该多好啊&#xf…

vue动态table 动态表头数据+动态列表数据

效果图: <template><div style"padding: 20px"><el-scrollbar><div class"scrollbar-flex-content"><div class"opt-search"><div style"width: 100px"> </div><div class"opt-b…

centos 和 ubuntu 区别

一、发行版与支持 1. CentOS 是基于 Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码重新编译而成的社区版&#xff0c;遵循开源协议。一般由社区进行维护&#xff0c;每 7 年左右发布一个主要版本&#xff0c;注重稳定性和长期支持&#xff0c;适合对系统稳定性…

面向对象设计在Java程序开发中的最佳实践研究

面向对象设计在Java程序开发中的最佳实践研究 面向对象设计&#xff08;Object-Oriented Design&#xff0c;OOD&#xff09;是Java程序开发的核心思想。通过合理运用OOD原则&#xff0c;开发者可以构建可维护、可扩展和高效的系统。本文将探讨面向对象设计在Java开发中的最佳…