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

Qt的QTabWidget的使用

在PyQt5中,QTabWidget 是一个用于管理多个选项卡页面的容器控件。以下是其使用方法的详细说明和示例:


1. 基本用法

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QLabel, QVBoxLayoutclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QTabWidget 示例")self.setGeometry(100, 100, 400, 300)# 创建 QTabWidgetself.tab_widget = QTabWidget()self.setCentralWidget(self.tab_widget)  # 将 QTabWidget 设置为主窗口的中心部件# 创建两个标签页self.tab1 = QWidget()self.tab2 = QWidget()# 添加标签页到 QTabWidgetself.tab_widget.addTab(self.tab1, "选项卡1")self.tab_widget.addTab(self.tab2, "选项卡2")# 初始化标签页内容self.init_tab1()self.init_tab2()def init_tab1(self):layout = QVBoxLayout()label = QLabel("这是第一个标签页的内容")layout.addWidget(label)self.tab1.setLayout(layout)def init_tab2(self):layout = QVBoxLayout()label = QLabel("这是第二个标签页的内容")layout.addWidget(label)self.tab2.setLayout(layout)if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())

2. 核心功能

添加/删除标签页
  • 添加标签页:使用 addTab(widget, title)insertTab(index, widget, title)
  • 删除标签页:使用 removeTab(index)
# 动态添加标签页示例
new_tab = QWidget()
self.tab_widget.addTab(new_tab, "新选项卡")# 删除第一个标签页
self.tab_widget.removeTab(0)
设置选项卡位置
self.tab_widget.setTabPosition(QTabWidget.North)  # 上方(默认)
self.tab_widget.setTabPosition(QTabWidget.South)  # 下方
self.tab_widget.setTabPosition(QTabWidget.West)   # 左侧
self.tab_widget.setTabPosition(QTabWidget.East)   # 右侧
信号与槽
  • currentChanged(int index):当切换标签页时触发
  • tabCloseRequested(int index):当关闭标签页时触发(需启用可关闭属性)
# 连接信号
self.tab_widget.currentChanged.connect(self.on_tab_changed)def on_tab_changed(self, index):print(f"切换到标签页 {index}")

3. 高级功能

可关闭的标签页
self.tab_widget.setTabsClosable(True)  # 显示关闭按钮
self.tab_widget.tabCloseRequested.connect(self.close_tab)  # 绑定关闭事件def close_tab(self, index):self.tab_widget.removeTab(index)
自定义图标和样式
from PyQt5.QtGui import QIcon# 设置标签页图标
self.tab_widget.addTab(self.tab1, QIcon("icon.png"), "带图标的标签页")# 使用 QSS 自定义样式
self.tab_widget.setStyleSheet("""QTabWidget::pane { border: 1px solid #999; }QTabBar::tab { padding: 10px; background: #EEE; }QTabBar::tab:selected { background: #FFF; }
""")

4. 完整示例

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QLabel, QPushButton, QVBoxLayout
from PyQt5.QtGui import QIconclass TabDemo(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("高级 QTabWidget 示例")self.setGeometry(100, 100, 600, 400)self.tab_widget = QTabWidget()self.setCentralWidget(self.tab_widget)# 标签页1:普通内容self.tab1 = QWidget()self.tab_widget.addTab(self.tab1, "基本信息")layout1 = QVBoxLayout()layout1.addWidget(QLabel("姓名:张三"))layout1.addWidget(QLabel("年龄:30"))self.tab1.setLayout(layout1)# 标签页2:按钮和交互self.tab2 = QWidget()self.tab_widget.addTab(self.tab2, QIcon("settings.png"), "设置")layout2 = QVBoxLayout()self.button = QPushButton("点击我")self.button.clicked.connect(lambda: print("按钮被点击!"))layout2.addWidget(self.button)self.tab2.setLayout(layout2)# 启用可关闭标签页self.tab_widget.setTabsClosable(True)self.tab_widget.tabCloseRequested.connect(self.close_tab)def close_tab(self, index):self.tab_widget.removeTab(index)if __name__ == "__main__":app = QApplication(sys.argv)window = TabDemo()window.show()sys.exit(app.exec_())

5. 注意事项

  • 布局管理:确保每个标签页内的控件正确添加到布局中,否则可能无法显示。
  • 内存管理:动态移除标签页时,PyQt5会自动释放资源,但复杂控件需手动清理。
  • 性能:避免在单个标签页中添加过多控件,影响界面响应速度。

通过上述方法,可以高效地利用 QTabWidget 构建清晰、易用的多页面界面。

相关文章:

Qt的QTabWidget的使用

在PyQt5中,QTabWidget 是一个用于管理多个选项卡页面的容器控件。以下是其使用方法的详细说明和示例: 1. 基本用法 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QLabel, QVBoxLayoutclass MainWindow(QMa…...

Next.js【详解】获取数据(访问接口)

Next.js 中分为 服务端组件 和 客户端组件&#xff0c;内置的获取数据各不相同 服务端组件 方式1 – 使用 fetch export default async function Page() {const data await fetch(https://api.vercel.app/blog)const posts await data.json()return (<ul>{posts.map((…...

反向代理模块kd

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…...

leaflet前端初始化项目

1、通过npm安装leaflet包&#xff0c;或者直接在项目中引入leaflet.js库文件。 npm 安装&#xff1a;npm i leaflet 如果在index.html中引入leaflet.js,在项目中可以直接使用变量L. 注意:尽量要么使用npm包&#xff0c;要么使用leaflet.js库&#xff0c;两者一起使用容易发生…...

CMS DTcms 靶场(弱口令、文件上传、tasklist提权、开启远程桌面3389、gotohttp远程登录控制)

环境说明 攻击机kali:192.168.111.128 信息收集 主机发现 ┌──(root㉿kali-plus)-[~/Desktop] └─# nmap -sP 192.168.111.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-23 14:57 CST Nmap scan report for 192.168.111.1 Host is up (0.00039s latenc…...

Docker 入门与实战:从安装到容器管理的完整指南

&#x1f680; Docker 入门与实战&#xff1a;从安装到容器管理的完整指南 &#x1f31f; &#x1f4d6; 简介 在现代软件开发中&#xff0c;容器化技术已经成为不可或缺的一部分。而 Docker 作为容器化领域的领头羊&#xff0c;以其轻量级、高效和跨平台的特性&#xff0c;深…...

git删除本地分支

一、命令方式 1、查看本地分支 git branch 2、切换到一个不删除的分支 git checkout branch_name 3、强制删除分支 git branch -D local_branch_name 二、工具方式 1、选择"Browse references"&#xff0c;右键"Delete branch"...

spring cloud gateway限流常见算法

目录 一、网关限流 1、限流的作用 1. 保护后端服务 2. 保证服务质量 (QoS) 3. 避免滥用和恶意攻击 4. 减少资源浪费 5. 提高系统可扩展性和稳定性 6. 控制不同用户的访问频率 7. 提升用户体验 8. 避免API滥用和负载过高 9. 监控与分析 10. 避免系统崩溃 2、网关限…...

本地使用docker部署DeepSeek大模型

1、相关技术介绍 1.1、RAG RAG&#xff08;Retrieval Augmented Generation&#xff09;&#xff0c;即“检索&#xff0c;增强&#xff0c;生成”&#xff0c;用于提升自然语言处理任务的性能。其核心思想是通过检索相关信息来增强生成模型的能力&#xff0c;具体步骤如下&am…...

C++ 设计模式-外观模式

外观模式的定义 外观模式是一种 结构型设计模式,它通过提供一个简化的接口来隐藏系统的复杂性。外观模式的核心思想是: 封装复杂子系统:将多个复杂的子系统或组件封装在一个统一的接口后面。提供简单接口:为客户端提供一个更简单、更易用的接口,而不需要客户端直接与复杂…...

【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…...

SQL进阶技巧:如何统计用户跨端消费行为?

目录 0 问题描述 2 问题剖析 技术难点解析 3 完整解决方案 步骤1:构造全量日期平台组合 步骤2:用户行为标记 步骤3:最终关联聚合 4 核心技巧总结 5 复杂度评估 往期精彩 0 问题描述 支出表: Spending +-------------+---------+ | Column Name | Type | +-----…...

Fiddler笔记

文章目录 一、与F12对比二、核心作用三、原理四、配置1.Rules:2.配置证书抓取https包3.设置过滤器4、抓取App包 五、模拟弱网测试六、调试1.线上调试2.断点调试 七、理论1.四要素2.如何定位前后端bug 注 一、与F12对比 相同点&#xff1a; 都可以对http和https请求进行抓包分析…...

基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

51c自动驾驶~合集51

我自己的原文哦~ https://blog.51cto.com/whaosoft/13320191 #毫末最新OAD 轨迹偏移学习助力端到端新SOTA~ 端到端自动驾驶技术在近年来取得了显著进展。在本研究中&#xff0c;我们提出了轨迹偏移学习&#xff0c;将传统的直接预测自车轨迹&#xff0c;转换为预测相对于…...

Redis 监视器:深入解析与实战指南

Redis 监视器&#xff1a;深入解析与实战指南 引言 随着互联网技术的飞速发展&#xff0c;企业对实时数据处理和高并发场景的需求日益增长。Redis作为一款高性能的内存数据库&#xff0c;在各个领域中得到了广泛应用&#xff0c;包括缓存、消息队列、实时数据分析等。然而&am…...

Java8适配的markdown转换html工具(FlexMark)

坐标地址&#xff1a; <dependency><groupId>com.vladsch.flexmark</groupId><artifactId>flexmark-all</artifactId><version>0.60.0</version> </dependency> 工具类代码&#xff1a; import com.vladsch.flexmark.ext.tab…...

超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍

该资料包涵盖了DeepSeek模型的下载、安装、部署以及本地运行的详细指南&#xff0c;适合希望在本地环境中高效运行DeepSeek模型的用户。资料包不仅包括基础的安装步骤&#xff0c;还提供了68G多套独立部署视频教程教程&#xff0c;针对不同硬件配置的模型选择建议&#xff0c;以…...

Postman - Postman 导入 JSON 文件(导入集合或环境变量)

一、Postman 中的 JSON 文件 在 Postman 中导入的 JSON 文件通常是指集合&#xff08;Collection&#xff09;或环境变量&#xff08;Environments&#xff09; 集合是 Postman 中用于管理 API 请求的一种方式&#xff0c;可以通过导入 JSON 文件来加载一个集合 环境变量是 P…...

傅里叶分析之掐死教程

https://zhuanlan.zhihu.com/p/19763358 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析 不仅仅是一个数学工具&#xff0c;更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是&#xff0c;傅里叶分析的公式看起来太复杂了&#xff0c;所以很多…...

1秒编译+零依赖!V语言如何重新定义系统级开发效率?

1秒编译零依赖&#xff01;V语言如何重新定义系统级开发效率&#xff1f; 【免费下载链接】v Simple, fast, safe, compiled language for developing maintainable software. Compiles itself in <1s with zero library dependencies. Supports automatic C > V transla…...

PyTorch训练时显存明明够用却报OOM?别急着调max_split_size_mb,先检查这个DataLoader参数

PyTorch训练时显存明明够用却报OOM&#xff1f;别急着调max_split_size_mb&#xff0c;先检查这个DataLoader参数 当你看到PyTorch报出"CUDA out of memory"错误时&#xff0c;第一反应可能是查看显存使用情况。但当你发现GPU明明还有大量空闲显存&#xff0c;却连一…...

孤能子视角:AI主要“病理“试分析

(在以下的与AI互动中&#xff0c;在EIS理论约束下&#xff0c;DeepSeek叫信兄&#xff0c;Kimi叫酷兄&#xff0c;我呢叫水兄。主要是观察关系场中AI角色的持续把握)(这是多次迭代的结果。姑且当科幻小说看)内容:1.硅界孤能子病理诊断学&#xff1a;EIS临床框架2.酷兄对千问症状…...

FPGA上基于LUT的深度神经网络优化与SparseLUT架构

1. 基于LUT的深度神经网络推理优化背景在边缘计算场景中&#xff0c;FPGA因其可重构性和低功耗特性&#xff0c;成为部署深度神经网络(DNN)的理想平台。传统基于乘法累加单元(MAC)的DNN实现方式在FPGA上会面临资源利用率低和能效比不高的问题。基于查找表(LUT)的DNN实现方案通过…...

为什么我的Nginx配置了gzip,但响应头里没有?

为什么我的Nginx配置了gzip&#xff0c;但响应头里没有&#xff1f; 在网站性能优化中&#xff0c;启用gzip压缩是减少传输数据量、提升加载速度的常见手段。许多用户在Nginx中配置了gzip后&#xff0c;却发现响应头中并未出现预期的Content-Encoding: gzip字段。这种情况可能…...

你的桌面需要一只会打鼓的猫咪吗?BongoCat让工作不再孤单

你的桌面需要一只会打鼓的猫咪吗&#xff1f;BongoCat让工作不再孤单 【免费下载链接】BongoCat &#x1f431; 跨平台互动桌宠 BongoCat&#xff0c;为桌面增添乐趣&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 你是否曾经在漫长的工作日里&a…...

揭秘Ryujinx:用C构建的高性能Nintendo Switch模拟器架构深度解析

揭秘Ryujinx&#xff1a;用C#构建的高性能Nintendo Switch模拟器架构深度解析 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 您是否曾好奇&#xff0c;如何在PC上精确模拟一台游戏主机…...

Coze 怎么接入 GPT API?3 种方案实测,最后一种 5 分钟搞定

上个月有个朋友找我帮忙&#xff0c;他在 Coze 上搭了一套客服 Bot&#xff0c;用的是平台自带的模型&#xff0c;效果一般。他想换成 GPT-5.5 来跑&#xff0c;但折腾了两天没搞定——Coze 的插件配置界面改了好几版&#xff0c;网上的教程大部分还是 2024 年的截图&#xff0…...

别再用Laravel Octane硬扛AI流量了!PHP 9.0原生异步I/O重构方案,实测吞吐量翻4.8倍

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;PHP 9.0 异步编程与 AI 聊天机器人 性能调优指南 PHP 9.0 引入了原生协程调度器&#xff08;Swoole 5.0 深度集成&#xff09;与 async/await 语法糖&#xff0c;使构建高并发 AI 聊天机器人成为可能。…...

保姆级教程:图形验证码后端核验全流程(多语言实现)

摘要 图形验证码作为互联网应用的第一道安全屏障&#xff0c;其后端核验机制的设计直接决定了验证码系统的安全性和用户体验。本文深入剖析图形验证码的核心核验流程&#xff0c;详细讲解基于Token的后端验证机制&#xff0c;并通过Java、Python、Go三种主流语言提供完整的代码…...