PyQt5菜单加多页签实现
pyqt tabs标签_哔哩哔哩_bilibili

代码实现
# coding:utf-8
import sys
from PyQt5.QtCore import Qt
from PyQt5 import QtCore,QtWidgets
from PyQt5.QtWidgets import QApplication,QWidget
from QhTabs01 import Ui_Form
from PyQt5.Qt import *class QhLiangHuaGUI(QWidget,Ui_Form):"""GUI交互部分代码"""def __init__(self,qh_parent = None):# super().__init__(qh_parent)self.QhFrameTabs = {}# 初始化是否选中Tab标题字典self.QhTabFrameStyleSheet = ["""background-color: rgb(188, 218, 218);border-top-left-radius: 8px; /* 通过设置左上角,右下角圆角得到特殊图形*/border-top-right-radius: 8px; border-bottom-left-radius: 8px;border-bottom-right-radius: 8px;border: 2px solid rgb(0, 0, 0);""","""background-color: rgb(235, 235, 235);border-top-left-radius: 8px; /* 通过设置左上角,右下角圆角得到特殊图形*/border-top-right-radius: 8px; border-bottom-left-radius: 8px;border-bottom-right-radius: 8px;"""]super(QhLiangHuaGUI, self).__init__()self.setupUi(self) # 调用Qh_SetupUI()函数,并把窗口作为实参传递给Qh_SetupUI()函# 首页--将需要变化的控件(QLable控件)对象添加到列表中 self.QhFrameTabs[self.QhHomeBack_label.objectName()] = self.QhHomeBack_label # 添加到列表中,用于是否选中self.QhHomeBut_pushButton.clicked.connect(lambda state, Qhbutton=self.QhHomeBut_pushButton: self.QhMainButClicked(Qhbutton)) # 绑定首页按钮点击事件menu = self.createMenu(self.QhMenuBut_pushButton)self.QhMenuBut_pushButton.setMenu(menu)for i in range(50):QhFraObj = self.QhAddTab(QhTabFu = self.scrollAreaWidgetContents,QhTabName = "QhTab{}".format(i),QhTabText = "阙辉你好-{}".format(i)) #控制在5个中文self.QhTabsAdd_horizontalLayout.addWidget(QhFraObj)self.QhFrameTabs[QhFraObj.objectName()] = QhFraObj # 添加到列表中,用于是否选中def QhAddTab(self,QhTabFu,QhTabName,QhTabText,QhTabIcon="url(:/test/QhImage/QhAiIoc.png);"):"""添加一个新的tab页面:param QhTabFu: 父类对象:param QhTabName: tab名称:param QhTabText: tab显示文本:return:阙辉"""# self.scrollAreaWidgetContentsQhFraObjName ="{}_TabMain_Frame".format(QhTabName)globals()["self.{}".format(QhFraObjName)] = QtWidgets.QFrame(QhTabFu)QhFraObj = globals()["self.{}".format(QhFraObjName)]QhFraObj.setMinimumSize(QtCore.QSize(138, 32))QhFraObj.setMaximumSize(QtCore.QSize(138, 32))QhFraObj.setStyleSheet("background-color: rgb(235, 235, 235);\n""border-top-left-radius: 8px; /* 通过设置左上角,右下角圆角得到特殊图形*/\n""border-top-right-radius: 8px; \n""border-bottom-left-radius: 8px;\n""border-bottom-right-radius: 8px;\n""\n""\n""")QhFraObj.setFrameShape(QtWidgets.QFrame.StyledPanel)QhFraObj.setFrameShadow(QtWidgets.QFrame.Raised)QhFraObj.setObjectName(QhFraObjName)QhIocLabObjName ="{}_Ioc_label".format(QhTabName)globals()["self.{}".format(QhIocLabObjName)] = QtWidgets.QLabel(QhFraObj)QhIocLabObj = globals()["self.{}".format(QhIocLabObjName)]# self.QhIoc_label = QtWidgets.QLabel(self.QhTabMain_Frame)QhIocLabObj.setGeometry(QtCore.QRect(2, 2, 28, 28))QhIocLabObj.setMinimumSize(QtCore.QSize(28, 28))QhIocLabObj.setMaximumSize(QtCore.QSize(28, 28))QhIocLabObj.setStyleSheet("border-image: {}".format(QhTabIcon)) # 设置tab页面图标QhIocLabObj.setText("")QhIocLabObj.setObjectName(QhIocLabObjName)QhTittleLabObjName ="{}_Tittle_label".format(QhTabName)globals()["self.{}".format(QhTittleLabObjName)] = QtWidgets.QLabel(QhFraObj)QhTittleLabObj = globals()["self.{}".format(QhTittleLabObjName)]# self.QhTittle_label = QtWidgets.QLabel(self.QhTabMain_Frame)QhTittleLabObj.setGeometry(QtCore.QRect(32, 2, 80, 28))QhTittleLabObj.setMinimumSize(QtCore.QSize(80, 28))QhTittleLabObj.setMaximumSize(QtCore.QSize(80, 28))QhTittleLabObj.setStyleSheet("border: 0px;")QhTittleLabObj.setText(QhTabText) # 设置tab页面标题QhTittleLabObj.setObjectName(QhTittleLabObjName)QhMainButObjName ="{}_MainBut_pushButton".format(QhTabName)globals()["self.{}".format(QhMainButObjName)] = QtWidgets.QPushButton(QhFraObj)QhMainButObj = globals()["self.{}".format(QhMainButObjName)]# self.QhMainBut_pushButton = QtWidgets.QPushButton(self.QhTabMain_Frame)QhMainButObj.setGeometry(QtCore.QRect(0, 0, 138, 32))QhMainButObj.setMinimumSize(QtCore.QSize(138, 32))QhMainButObj.setMaximumSize(QtCore.QSize(138, 32))QhMainButObj.setStyleSheet("/*按钮图标样式 QH*/\n""QPushButton{\n"" border: none; /*边框透明 QH*/\n"" background: transparent; /*背景透明 QH*/ \n""} \n""\n""QPushButton:hover{ \n"" border: 2px solid rgb(0, 0, 0);\n"" border-top-left-radius: 8px; /* 通过设置左上角,右下角圆角得到特殊图形*/\n"" border-top-right-radius: 8px; \n"" border-bottom-left-radius: 8px;\n"" border-bottom-right-radius: 8px;\n"" \n""}\n""\n""QPushButton:pressed {\n"" background-color:rgba(255, 255, 255, 188);\n"" \n""}")QhMainButObj.setText("")QhMainButObj.setObjectName(QhMainButObjName)QhMainButObj.clicked.connect(lambda state, Qhbutton=QhMainButObj: self.QhMainButClicked(Qhbutton)) # 绑定按钮点击事件QhCloseIocObjName ="{}_CloseIoc_label".format(QhTabName)globals()["self.{}".format(QhCloseIocObjName)] = QtWidgets.QLabel(QhFraObj)QhCloseIocObj = globals()["self.{}".format(QhCloseIocObjName)]# self.QhCloseIoc_label = QtWidgets.QLabel(self.QhTabMain_Frame)QhCloseIocObj.setGeometry(QtCore.QRect(115, 6, 20, 20))QhCloseIocObj.setMinimumSize(QtCore.QSize(20, 20))QhCloseIocObj.setMaximumSize(QtCore.QSize(20, 20))QhCloseIocObj.setStyleSheet("border-image: url(:/test/QhImage/QhClose.png);")QhCloseIocObj.setText("")QhCloseIocObj.setObjectName(QhCloseIocObjName)QhCloseButObjName ="{}_CloseBut_pushButton".format(QhTabName)globals()["self.{}".format(QhCloseButObjName)] = QtWidgets.QPushButton(QhFraObj)QhCloseButObj = globals()["self.{}".format(QhCloseButObjName)]# self.QhCloseBut_pushButton = QtWidgets.QPushButton(self.QhTabMain_Frame)QhCloseButObj.setGeometry(QtCore.QRect(115, 6, 20, 20))QhCloseButObj.setMinimumSize(QtCore.QSize(20, 20))QhCloseButObj.setMaximumSize(QtCore.QSize(20, 20))QhCloseButObj.setStyleSheet("/*按钮图标样式 QH*/\n""QPushButton{\n"" border: none; /*边框透明 QH*/\n"" background: transparent; /*背景透明 QH*/ \n""} \n""QPushButton:hover{ \n"" border: 2px solid rgb(0, 0, 0);\n"" background-color: rgba(255, 0, 0, 168);\n"" border-top-left-radius: 4px; /* 通过设置左上角,右下角圆角得到特殊图形*/\n"" border-top-right-radius: 4px; \n"" border-bottom-left-radius: 4px;\n"" border-bottom-right-radius: 4px;\n"" \n""}\n""QPushButton:pressed {\n"" background-color:rgba(255, 255, 255, 188);\n"" \n""}")QhCloseButObj.setText("")QhCloseButObj.setObjectName(QhCloseButObjName)QhCloseButObj.clicked.connect(lambda state, Qhbutton=QhCloseButObj: self.QhCloseButClicked(Qhbutton)) # 绑定按钮点击事件return QhFraObjdef QhMainButClicked(self,Qhbutton):"""Tab按钮事件阙辉"""QhButObjName = Qhbutton.objectName()QhTabName = QhButObjName.split("_")[0]print("按下的按钮对象名【{}】".format(QhButObjName))QhFraObjName ="{}_TabMain_Frame".format(QhTabName) # 组合变化控件名称self.QhTabsIsAtive(QhButObjName,QhFraObjName) # 判断是否选中,并改变样式def QhTabsIsAtive(self,QhButObjName,QhFraObjName):"""是否选中tabs标题:param QhButObjName: 按钮对象名称,用于判断是否是首页:param QhFraObjName: 首页以为切换的对象名,即Frame对象:return:阙辉"""for QhKey,QhValue in self.QhFrameTabs.items():if QhButObjName == "QhHomeBut_pushButton":# 判断是否是首页if QhKey == "QhHomeBack_label":# 判断对象名是否为首页需要改变样式的对象名 QhValue.setStyleSheet(self.QhTabFrameStyleSheet[0])else:QhValue.setStyleSheet(self.QhTabFrameStyleSheet[1])else:if QhKey == QhFraObjName:# 判断对象名不是首页需要改变样式的对象名 QhValue.setStyleSheet(self.QhTabFrameStyleSheet[0])else:QhValue.setStyleSheet(self.QhTabFrameStyleSheet[1])def QhCloseButClicked(self,Qhbutton):"""Tab关闭按钮事件阙辉"""QhButObjName = Qhbutton.objectName()print(QhButObjName)def createMenu(self,part):# 创建主菜单main_menu = QMenu('主菜单', part)# 创建主菜单 行为动作项目main_action = QAction(QIcon('../images/png/edit.png'), '主菜单行为菜单项', main_menu)# 主菜单行为动作 绑定数据main_action.setData([1,2,3,4,5])# 创建子菜单sub_menu = QMenu('子菜单', main_menu)# 创建子菜单 行为动作项目sub_action1 = QAction('子菜单行为动作项目1', sub_menu)sub_action2 = QAction('子菜单行为动作项目2', sub_menu)sub_action3 = QAction('子菜单行为动作项目3', sub_menu)sub_action4 = QAction('子菜单行为动作项目4', sub_menu)# 子菜单行为动作 绑定数据sub_action1.setData({"name":"Fz","age":36})# 子菜单添加项目sub_menu.addAction(sub_action1)sub_menu.addAction(sub_action2)sub_menu.addAction(sub_action3)sub_menu.addAction(sub_action4)# 主菜单添加项目main_menu.addAction(main_action)main_menu.addSeparator()main_menu.addMenu(sub_menu)return main_menuif __name__ == '__main__':# QApplication.setHighDpiScaleFactorRoundingPolicy(# Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)# QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)# QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)qh_app = QApplication(sys.argv) # 创建应用实例 # 创建应用实例qh_MyWindows = QhLiangHuaGUI() # 创建窗口实例qh_MyWindows.show() # 显示窗口qh_n = qh_app.exec() # 执行exec()方法,进入事件循环,如果遇到窗口退出命令,返回整数qh_nprint(qh_n) # 输出输出关闭事件返回的整数try: # 捕获程序退出事件sys.exit(qh_n) # 通知python系统,结束程序运行except SystemExit:print("请在此做一些其他工作。") # python解释器停止执行前的工作
相关文章:
PyQt5菜单加多页签实现
pyqt tabs标签_哔哩哔哩_bilibili 代码实现 # coding:utf-8 import sys from PyQt5.QtCore import Qt from PyQt5 import QtCore,QtWidgets from PyQt5.QtWidgets import QApplication,QWidget from QhTabs01 import Ui_Form from PyQt5.Qt import *class QhLiangHuaGUI(QWidg…...
关注搜索引擎蜘蛛压力
以前在建站的时候,他们说蜘蛛来抓取的频率越多越好,因为蜘蛛来抓取说明了网站更新速度快,受搜索引擎的欢迎,但是在最近的网站统计中,发现很多蜘蛛爬取的频次非常的高,比如有的蜘蛛一天能来网站几万次&#…...
Python3 OS模块中的文件/目录方法说明三
一. 简介 前面文章简单学习了Python3中 OS模块中的文件/目录的部分函数。 本文继续来学习 OS模块中文件、目录的操作方法:os.fdopen()方法、os.fpathconf() 方法、os.fstat() 方法、os.fstatvfs() 方法。 二. Python3 OS模块中的文件/目录方法说明三 1. os.fdop…...
2024年终总结:技术成长与突破之路
文章目录 前言一、技术成长:菜鸟成长之路1. 学习与实践的结合2. 技术分享与社区交流 二、生活与事业的平衡:技术之外的思考1. 时间管理与效率提升2. 技术对生活的积极影响 三、突破与展望:未来之路1. 技术领域的突破2. 未来规划与目标 四、结…...
mysql-06.JDBC
目录 什么是JDBC: 为啥存在JDBC: JDBC工作原理: JDBC的优势: 下载mysql驱动包: 用java程序操作数据库 1.创建dataSource: 2.与服务端建立连接 3.构造sql语句 4.执行sql 5.关闭连接,释放资源 参考代码: 插…...
使用python调用JIRA6 进行OAuth1认证获取AccessToken
Jira配置应用程序链接 1) 创建应用程序链接 登录 JIRA 管理后台。转到 Administration > Applications > Application Links。在输入框中输入外部应用程序的 URL(例如 GitLab 或自定义应用),然后点击 Create new link。 2) 配置 Con…...
HTML5使用favicon.ico图标
目录 1. 使用favicon.ico图标 1. 使用favicon.ico图标 favicon.ico一般用于作为网站标志,它显示在浏览器的地址栏或者标签上 制作favicon图标 选择一个png转ico的在线网站,这里以https://www.bitbug.net/为例。上传图片,目标尺寸选择48x48&a…...
黑龙江锅包肉:酸甜香酥的东北经典
黑龙江锅包肉:酸甜香酥的东北经典 黑龙江锅包肉,作为东北菜的代表之一,尤其在黑龙江省哈尔滨市享有极高的声誉。这道美食不仅承载着丰富的历史文化内涵,更以其鲜明的地域特色,成为了黑龙江省乃至整个东北地区的标志性菜肴。 历史渊源 锅包肉的历史可以追溯到清朝光绪年间,其…...
Unity阿里云OpenAPI 获取 Token的C#【记录】
获取Token using UnityEngine; using System; using System.Text; using System.Linq; using Newtonsoft.Json.Linq; using System.Security.Cryptography; using UnityEngine.Networking; using System.Collections.Generic; using System.Globalization; using Cysharp.Thr…...
winfrom项目,引用EPPlus.dll实现将DataTable 中的数据保存到Excel文件
最近研究不安装office也可以保存Excel文件,在网上查询资料找到这个方法。 第一步:下载EPPlus.dll文件(自行去网上搜索下载) 第二步:引用到需要用的项目中,如图所示: 第三步:写代码…...
【C++基础】多线程并发场景下的同步方法
如果在多线程程序中对全局变量的访问没有进行适当的同步控制(例如使用互斥锁、原子变量等),会导致多个线程同时访问和修改全局变量时发生竞态条件(race condition)。这种竞态条件可能会导致一系列不确定和严重的后果。…...
C语言#define TSLP0 (TSLP_Regdef *)TSENSORO BASE ADDR)的含义?
在C语言中,#define指令用于定义宏。宏是一种预处理器指令,它允许你为代码片段指定一个名称,以便在编译时进行替换。 从你的描述来看,似乎你想定义一个名为 TSLP0 的宏,其值是某个寄存器地址。假设 TSENSORO_BASE_ADDR…...
微信小程序wxs实现UTC转北京时间
微信小程序实现UTC转北京时间 打脸一刻:最近在迭代原生微信小程序,好一段时间没写原生的,有点不习惯; 咦,更新数据咋不生效呢?原来还停留在 this.xxx; 哟,事件又没反应了?…...
提示词的艺术 ---- AI Prompt 进阶(提示词框架)
提示词的艺术 ---- AI Prompt 进阶(提示词框架) 写在前面 上周发布了一篇《提示词的艺术----AI Prompt撰写指南》,旨在帮助读者理解提示词的作用,以及简单的提示词撰写指南。本篇作为进阶内容,将给出常用的提示词框架…...
WPF常见面试题解答
以下是WPF(Windows Presentation Foundation)面试中常见的问题及解答,涵盖基础概念、高级功能和实际应用,帮助你更好地准备面试: 基础概念 什么是WPF? WPF是微软开发的用于构建桌面应用程序的UI框架&#x…...
TypeScript 学习
TypeScript 类型 准备本地环境 初始化 TypeScript 项目, 生成 package.json 文件: npm init -y安装 typescript: yarn add typescript -D初始化 TypeScript 配置文件: npx tsc--init输出: Created a new tsconfig.json with:target: es2016module: commonjsstrict: true…...
24_游戏启动逻辑梳理总结
首先这个项目从游戏根入口GameRoot.cs的初始化开始 分为 服务层初始化Svc.cs 与 业务系统层初始化Sys.cs 而服务层 分为 资源加载服务层ResSvc.cs 与 音乐播放服务层AudioSvc.cs 而在 资源加载服务层ResSvc.cs中 初始化了 名字的 配置文件 而音乐播放服务层AudioSvc.cs 暂时没…...
C++/CLI(Common Language Runtime)关键点详解
C++/CLI(Common Language Runtime)是 Microsoft Visual C++ 的一个扩展,允许使用 .NET Framework 的功能,同时保留对本机 C++ 代码的访问。当您需要在 C++ 和 C# 之间进行互操作时,C++/CLI 是一种常见的选择,因为它可以作为桥梁,将托管代码(如 C#)与非托管代码(如 C+…...
Transfoemr的解码器(Decoder)与分词技术
在自然语言处理(NLP)领域,解码器(Decoder)和分词技术是两个至关重要的概念。解码器是序列生成任务的核心组件,而分词则是将文本数据转换为可处理形式的基础步骤。 一、解码器(Decoder&…...
CDSN 2024博客之星总评选-主题文章创作,我的AI之路-起手篇
CDSN 2024博客之星总评选-主题文章创作,我的AI之路-起手篇 一. 回顾自己的机器学习之路二. 2024年的大模型学习三. 对自己的期望 一. 回顾自己的机器学习之路 自2019年起,我开始涉足机器学习领域,最初接触的是通过模型实现自动化的任务&…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
