python+pyqt5设置窗体图标和任务栏图标及窗体标题的方法

news2025/1/11 2:51:02

本次设置窗体标题只用了一种方法,在进行窗体实例化后window = Window(),使用setWindowTitle(str)命令,在主程序中的设置命令如下所示:

if __name__ == '__main__':

    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
    app = QApplication(sys.argv)
    window = Window()

    # 设置窗口标题
    window.setWindowTitle('真棒')

    window.show()
    sys.exit(app.exec_())

本文主要讨论设置窗体图标及任务栏图标的问题,本次使用了四种方法实现了窗体图标的设置。方法一和方法二在通过pyinstaller转换为exe文件后,需要将图标放入exe文件目录,方法三和方法四将图标转换为.py文件可以和exe文件一起打包,无需再转存图标文件。这些方法均需在主函数的代码段

if __name__ == '__main__':

中进行添加

在模块中开头引用中需添加以下代码,否则任务栏图标不显示

import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")

1.方法一:QPixmap

将ico图标通过QPixmap方法进行设置,QPixmap方法对图标的放大效果较好,但是几十k的图标文件会被放大几倍或十几倍,更占据内存空间,因此该方法更适用于较小的图片。

if __name__ == '__main__':

    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
    app = QApplication(sys.argv)
    window = Window()

    # 方法一:设置窗口图标,此方法占内存多,但图标显示效果较好,适用于较小的图片
    ico_path = os.path.join(os.path.dirname(__file__), 'subway.ico')
    icon = QtGui.QIcon()
    icon.addPixmap(QtGui.QPixmap(ico_path), QtGui.QIcon.Normal, QtGui.QIcon.Off)
    window.setWindowIcon(icon)

    # 设置窗口标题
    window.setWindowTitle('真棒')

    window.show()
    sys.exit(app.exec_())

2.方法二:setWindowIcon(QIcon("./subway.ico"))

此方法直接将ico图片设置为窗体图标显示效果不如方法一,适用于较大的图片

if __name__ == '__main__':

    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
    app = QApplication(sys.argv)
    window = Window()

    # 方法二:设置窗口图标,此方法占内存小,显示效果不如方法一,适用于较大的图片
    window.setWindowIcon(QIcon("./subway.ico"))

    # 设置窗口标题
    window.setWindowTitle('真棒')

    window.show()
    sys.exit(app.exec_())

3.方法三:base64

本方法引用文章Python文件带图片打包exe(Pyinstaller)https://blog.csdn.net/ziigea/article/details/112647727#:~:text=Python%E6%96%87%E4%BB%B6%E5%B8%A6%E5%9B%BE%E7%89%87%E6%89%93%E5%8C%85exe%EF%BC%88Pyinstaller%EF%BC%89%201%201.%E5%AE%89%E8%A3%85%20pip%20install%20pywin32%20pip%20install,2.%20%E4%B8%8D%E5%8A%A0%E2%80%93noupx%E5%8F%AF%E6%89%93%E5%8C%85%E6%88%90%E5%8A%9F%EF%BC%8C%E4%BD%86%E6%96%87%E4%BB%B6%E5%8F%AF%E8%83%BD%E9%97%AA%E9%80%80%203%203.%E5%9B%BE%E7%89%87%E6%96%87%E4%BB%B6%E6%89%93%E5%8C%85%20%E5%A6%82%E6%9E%9C%E6%9C%89%E5%9B%BE%E7%89%87%E6%96%87%E4%BB%B6%EF%BC%8C%E5%88%99%E9%A1%BB%E5%9C%A8%E6%89%93%E5%8C%85%E4%B9%8B%E5%89%8D%E6%8A%8A%E5%9B%BE%E7%89%87%E8%BD%AC%E5%8C%96%E6%88%90py%E6%96%87%E4%BB%B6%EF%BC%8C%E5%86%8D%E4%BD%BF%E7%94%A8%E4%B8%8A%E8%BF%B0%E6%96%B9%E6%B3%95%E6%89%93%E5%8C%85%E3%80%82%20%E8%BF%99%E9%87%8C%E9%87%87%E7%94%A8base64%E6%A0%BC%E5%BC%8F%20PicToPy.py%20

将图片转化为base64格式,保存在.py文件中,在进行打包时可以将图标直接放入exe文件中,无需再exe目录中再保存ico图标文件。

PicToPy.py

import base64

def pictopy(picture_names, py_name):
    """
    将图像文件转换为py文件
    :param picture_name:
    :return:
    """
    write_data = []
    for picture_name in picture_names:
        filename = picture_name.replace('.', '_')
        open_pic = open("%s" % picture_name, 'rb')
        b64str = base64.b64encode(open_pic.read())
        open_pic.close()
        # 注意这边b64str一定要加上.decode()
        write_data.append('%s = "%s"\n' % (filename, b64str.decode()))

    f = open('%s.py' % py_name, 'w+')
    for data in write_data:
        f.write(data)
    f.close()


# pics = ["logo_2.png", "logo.ico"] 中的图片存放在PicToPy.py同一目录中,运行完成后,
# 会在当前路径看到一个memory_pic.py文件
pics = ["logo_2.png", "subway.ico"]
pictopy(pics, 'memory_pic')  # 将pics里面的图片写到 memory_pic.py 中
print("ok")

在通过PicToPy.py对图片进行转存后,图片保存在memory_pic.py文件。

在主函数中对图标进行调用,注意图片文件在转化后命名规则变为“文件名_文件类型”,本项目中subway.ico变为subway_ico,代码如下:

import base64
from memory_pic import subway_ico

if __name__ == '__main__':

    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
    app = QApplication(sys.argv)
    window = Window()

    # 方法三:把图片转化为base64格式
    Logo = QtGui.QPixmap()
    Logo.loadFromData(base64.b64decode(subway_ico))
    icon = QtGui.QIcon()
    icon.addPixmap(Logo, QtGui.QIcon.Normal, QtGui.QIcon.Off)
    window.setWindowIcon(icon)

    # 设置窗口标题
    window.setWindowTitle('真棒')

    window.show()
    sys.exit(app.exec_())

4.方法四:通过pyqt的QTDesigner

在使用pyqt进行窗口资源管理时,可以将.qrc文件通过PyRCC将图片转化为.py文件,再在主函数中引用即可

 通过“编辑样式表”打开“添加资源”按钮,通过编辑资源将图标文件添加到.qrc文件,使用PyRCC将rec.qrc(可以另起名字)转化为rec.py。主函数中代码如下:

import ico_rc  # 必须引用图标文件,不然图标不显示

if __name__ == '__main__':

    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
    app = QApplication(sys.argv)
    window = Window()

    # 方法四:
    icon = QtGui.QIcon()
    icon.addPixmap(QtGui.QPixmap(":/ico/subway.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
    window.setWindowIcon(icon)

    # 设置窗口标题
    window.setWindowTitle('真棒')

    window.show()
    sys.exit(app.exec_())

此方法较方法三,在使用pyqt时省去了使用PicToPy.py对图片进行转化的操作,可以直接通过PyRCC将图片转换为.py文件,其中":/ico/subway.ico"为图标文件在添加到资源.qrc文件中的路径

参考链接:

Python文件带图片打包exe(Pyinstaller)

python+pyqt5+pyinstaller 将ico图标打包进exe方法

QPixmap、QIcon和QImage

手把手教你pyqt中.qrc图片文件的编写和使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习——05线性回归

机器学习——05线性回归 参考资料 AIlearningMachine-Learning-in-Action庞善民.西安交通大学机器学习导论2022春PPT 使用Jupyter进行练习,python3 具体项目地址:https://github.com/yijunquan-afk/machine-learning/tree/master/basic-learn/05-reg…

ARM S5PV210 X210 刷机教程总结

前言 S5PV210 X210 开发板外观介绍 一、开发板刷系统1 1. 什么是刷系统 刷系统就是利用刷机工具,向开发板中烧录预先编译好的系统镜像,使之在开发板上运行起来。 2. 串口输出的意义(做系统控制台) 串口是一种硬件通信口&…

【将高光谱、多光谱和全色图像进行融合】

HyperNet: A deep network for hyperspectral, multispectral, and panchromatic image fusion (HyperNet:一种用于高光谱、多光谱和全色图像融合的深度网络) 传统的方法主要是将高光谱图像(hyperspectral image (HSI)&#xff0…

定时红绿灯(C51单片机)

一.项目题目:利用中断处理制作的定时LED红绿灯系统 二.项目器件: 红色LED灯 绿色LED灯 黄色LED灯 100R电阻 电源 电容器 C51单片机 接地线 三.项目原理图 四.项目实现功能: 使用定时器/计数…

【云原生 | Kubernetes 实战】14、K8s 控制器 Statefulset 入门到企业实战应用

目录 一、Statefulset 控制器:概念、原理解读 1.1 什么是有状态服务? 1.2 什么是无状态服务? 二、 Statefulset 资源清单文件编写技巧 三、Statefulset 使用案例:部署 web 站点 3.1 StatefulSet 由以下几个部分组成&#xf…

VMware克隆虚拟机

一、克隆虚拟机 1. 在WMware中,右键虚拟机模板(需要克隆的虚拟机原型),选择:管理 ----> 克隆,如下图所示: 2. 然后,如下图进行操作: 二、扩展:移除、删除…

【Python】 14-CVS文件操作

1.CVS文件 值没有类型,所有东西都是字符串; • 没有字体大小或颜色的设置; • 没有多个工作表; • 不能指定单元格的宽度和高度; • 不能合并单元格; • 不能嵌入图像或图表。 CSV 文件中的每个单元格 有逗…

【JavaSE基础:数据类型和变量】

数据类型一、数据类型1.八大基本数据类型二、变量0.字面常量1.变量1)数值类型a.整型b.浮点型2)字符类型(char)3)布尔类型(boolean)2.类型转换3.类型提升一、数据类型 Java是一种强类型编程语言…

[思维模式-6]:《如何系统思考》-2- 认识篇 - 为什么要系统思考?系统思考是系统架构师、系统设计师的基本技能

目录 前言:系统思考的关键字 第1章 系统思考的作用 1.1 系统思考能够化繁为简 1.2 系统思考是敏捷成长和解决问题的系统方法 第2章 常见缺乏系统思考的表现 2.1 分解思维盛行的不足 2.2 面积上:只见树木,不见深林 2.3 时间上&#xf…

Tippecanoe安装使用

Tippecanoe安装使用 介绍 tippecanoe是mapbox官方提供的一个开源矢量切片工具,用C语言编写的。 Tippecanoe 的目标是为您的数据制作一个与比例无关的视图,以便在从整个世界到单个建筑物的任何级别上,您都可以看到数据的密度和纹理&#xf…

02---前端框架搭建

1、创建项目 1.该有的nodejs 、vue都要安装上,我用的是vuecli3,所以可以使用可视化界面 来创建项目(更加直观),当然你也可以采用命令行的方式创建项目。 2.cmd命令行输入: vue ui 3.在打开的可视化页面中…

基于asp.net193酒店客房预订网站系统-计算机毕业设计

项目介绍 本酒店系统使用asp.net技术制作,在前台为普通用户提供预定和查询等系统使用功能,在后台为酒店管理员提供对系统平台的管理功能。在前台为用户提供的操作功能包括以下内容:站内新闻、用户注册、酒店查看,留言板等功能。此系统为管理…

AMAIZINGIC晶焱科技:Wi-Fi 6E 路由器产品的ESD/EOS防护方案

AMAIZINGIC晶焱科技:Wi-Fi 6E 路由器产品的ESD/EOS防护方案 随着无线网路的发展,IEEE协会于2020年提出了最新的Wi-Fi 6E,此版本为Wi-Fi 6的延伸版本,除了Wi-Fi 6原先支援的2.4GHz及5GHz的频段外,新增了6GHz的频段&…

功能超级强大,Python 命令行解析工具 argparse很好用

在工作中,我们经常需要从命令行当中解析出指定的参数,而 Python 也提供了相应的标准库来做这件事情,比如 sys, optparse, getopt, argparse。这里面功能最强大的莫过于 argparse,下面就来看看它用法。 import argparse # 使用 a…

Java+SSM在线商城系统电商购物系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下 后台框架:Spring、SpringMVC、MyBatis UI界面:BootStrap、jQuery 、JSP 数据库:MySQL 系统分为前台订票和后台管理: 1.前台商城 商品分类展示、商品详情、商品推荐、购物车、下单、支付 客…

课题设计基于nodejs购票系统的设计与实现.zip(论文+源码+ppt文档+视频录制)

第 1 章 绪 论 3 1.1研究现状及存在问题 3 1.2主要工作 4 第 2 章 系统开发技术概述 5 2.1 B/S 架构模式与C/S 架构模式 5 2.2 nodejs框架模式 6 第 3 章 需求分析 7 3.1 系统情况概述 7 3.2 系统功能性需求分析 9 3.3 系统非功能性需求分析 9 3.4 系统用例图 10 第 4 章 系统设…

【JavaSE】文件读写

目录 一、文件 1、文件的概念 1.广义 2.狭义 二、路径 1、绝对路径 2、相对路径 1.进入下一级./ 2.回退上一级../ 三、Java里的文件基本操作----File类 1、说明 2、File类的基本操作 1.基本方法 ​2.创建与删除文件 3.创建目录 4.文件的重命名 四、文件的读写操…

信息安全技术

安全分析模型自动化调优 MLOps(Machine Learning Operations)是一种人工智能 的工程实践,是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化,支持ML 模型的发布、激活、监控、性能跟踪…

【Spring Cloud】Nacos命名空间Namespace的介绍与使用

本期目录1. Namespace介绍2. 创建Namespace3. 配置Namespace专栏精选文章1. Namespace介绍 Namespace 通常用来做环境隔离。例如开发环境 dev 、测试环境 test 和生产环境 pro 之间的服务/数据相互隔离,无法相互访问。 Nacos 中服务和数据存储的最外层都是 Namespa…

常用性能测试工具的比较

目录性能测试的重要性针对接口的性能测试性能测试基准接口性能测试的主要指标abenchjMeterKelude性能脚本各种监控工具参考总结性能测试的重要性 众所周知性能测试在软件测试中占有举足轻重的作用,尤其是对于互联网产品这种具有大用户量,大数据量&#…