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

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解释器停止执行前的工作

http://www.lryc.cn/news/525974.html

相关文章:

  • 关注搜索引擎蜘蛛压力
  • Python3 OS模块中的文件/目录方法说明三
  • 2024年终总结:技术成长与突破之路
  • mysql-06.JDBC
  • 使用python调用JIRA6 进行OAuth1认证获取AccessToken
  • HTML5使用favicon.ico图标
  • 黑龙江锅包肉:酸甜香酥的东北经典
  • Unity阿里云OpenAPI 获取 Token的C#【记录】
  • winfrom项目,引用EPPlus.dll实现将DataTable 中的数据保存到Excel文件
  • 【C++基础】多线程并发场景下的同步方法
  • C语言#define TSLP0 (TSLP_Regdef *)TSENSORO BASE ADDR)的含义?
  • 微信小程序wxs实现UTC转北京时间
  • 提示词的艺术 ---- AI Prompt 进阶(提示词框架)
  • WPF常见面试题解答
  • TypeScript 学习
  • 24_游戏启动逻辑梳理总结
  • C++/CLI(Common Language Runtime)关键点详解
  • Transfoemr的解码器(Decoder)与分词技术
  • CDSN 2024博客之星总评选-主题文章创作,我的AI之路-起手篇
  • Android BitmapShader简洁实现马赛克,Kotlin(二)
  • 蓝桥杯 阶乘的和(C++完整代码+详细分析)
  • 【Bug 记录】el-sub-menu 第一次进入默认不高亮
  • SpringCloud两种注册中心
  • 陕西羊肉泡馍:味蕾上的西北风情
  • 蓝桥杯试题:整数反转
  • Moretl FileSync增量文件采集工具
  • day1代码练习
  • 【Pytest】结构介绍
  • Django基础之ORM
  • 【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析