Qt for Python (PySide6)设置程序图标和任务栏图标

环境

使用Qt for Python开发Windows应用程序。
Python版本:3.12
Qt版本:PySide6

前言

先上一个简单的测试程序

from PySide6.QtWidgets import QMainWindow,QLabel,QApplication
from PySide6 import QtGui
import sysclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.resize(200,100)self.setWindowTitle("Hello World")label = QLabel("My test app.")label.setMargin(10)self.setCentralWidget(label)self.show()if __name__ == '__main__':app = QApplication(sys.argv)w = MainWindow()app.exec()

运行:
在这里插入图片描述

设置应用程序图标

以上测试程序,左上角没有程序图标,想要设置窗口显示的图标,很简单,和原生Qt开发一样的,添加setWindowIcon

修改以上代码,添加:

if __name__ == '__main__':app = QApplication(sys.argv)app.setWindowIcon(QtGui.QIcon('logo.ico'))w = MainWindow()app.exec()

再次运行,就可以看到窗口显示的程序图标了。
在这里插入图片描述
通过pyinstaller打包出来:

 pyinstaller.exe .\TestIcon.py

这时候会看到一个默认的程序图标,如下:
在这里插入图片描述
这并不是我们想要设置的logo,想要修改这个应用程序图标,两个方法:

1.通过pyinstaller命令直接添加ico图标进行打包

pyinstaller.exe --windowed --icon=logo.ico .\TestIcon.py

然后可以看到同级目录下dist文件夹中,生成的打包程序:
在这里插入图片描述

2.通过修改.spec文件后打包

前面我们在执行 pyinstaller.exe .\TestIcon.py后 ,同级目录下会生成一个和Python文件名相同的.spec文件
在这里插入图片描述
通过文本打开后,在这里添加icon=['logo.ico'] 指定ico图标的位置
在这里插入图片描述
然后在终端使用pyinstaller执行这个spec文件:

pyinstaller.exe .\TestIcon.spec

也是同样的效果。

最后需要注意的是,pyinstaller打包后,需要将图标文件拷贝到运行程序目录去,否则运行时窗口图标显示不了。

设置任务栏图标

以上设置了窗口上显示的程序图标以及打包出来的exe显示的图标,再次运行这个程序,会发现系统任务栏上显示的图标依然不是我们设置的logo图标,而是这样:
在这里插入图片描述

这是因为运行应用程序时,Windows 会查看可执行文件并尝试猜测它属于哪个“应用程序组”。默认情况下,任何 Python 脚本(包括你的应用程序)都归入同一个“Python”组,因此将显示 Python 图标。为了阻止这种情况发生,我们需要为 Windows 提供不同的应用程序标识符。

下面的代码通过调用ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID()自定义应用程序 ID 来实现这一点。
只需要在代码前面添加以下内容:

try:from ctypes import windll  # Only exists on Windows.myappid = 'mycompany.myproduct.subproduct.version'windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
except ImportError:pass

完整代码如下:

from PySide6.QtWidgets import QMainWindow,QLabel,QApplication
from PySide6 import QtGui
import systry:from ctypes import windll  # Only exists on Windows.myappid = 'mycompany.myproduct.subproduct.version'windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
except ImportError:passclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.resize(200,100)self.setWindowTitle("Hello World")label = QLabel("My test app.")label.setMargin(10)self.setCentralWidget(label)self.show()if __name__ == '__main__':app = QApplication(sys.argv)app.setWindowIcon(QtGui.QIcon('logo.ico'))w = MainWindow()app.exec()

再次运行,可以看到系统任务栏上已经能够正常显示logo了
在这里插入图片描述
注意:上面的列表显示了一个通用mycompany.myproduct.subproduct.version字符串,实际应该对其进行更改以成你的实际应用的信息。输入什么并不重要,但惯例是使用反向域表示法com.mycompany来表示公司标识符。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基础笔记(三)

在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助,请多多点赞、评论、收藏,你们的反馈是我更新最大的动力! 创建和管理表 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数…

FlashAttention理解

参考:https://github.com/Dao-AILab/flash-attention 文章目录 一、FlashAttention理解1. FlashAttention的特点:2. 工作原理3. 安装4. 代码示例5. flash_attn_func 参数说明6. 适用场景7. 总结 二、FlashAttention 1.X 2.X 3.X版本的区别与联系1. **Fla…

网络安全渗透有什么常见的漏洞吗?

弱口令与密码安全问题 THINKMO 01 暴力破解登录(Weak Password Attack) 在某次渗透测试中,测试人员发现一个网站的后台管理系统使用了非常简单的密码 admin123,而且用户名也是常见的 admin。那么攻击者就可以通过暴力破解工具&…

OpenCV基本图像处理操作(三)——图像轮廓

轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL :只检索最外面的轮廓;RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;RETR_CCOMP:检索所有的轮廓,并将他们组…

建投数据与腾讯云数据库TDSQL完成产品兼容性互认证

近日,经与腾讯云联合测试,建投数据自主研发的人力资源信息管理系统V3.0、招聘管理系统V3.0、绩效管理系统V2.0、培训管理系统V3.0通过腾讯云数据库TDSQL的技术认证,符合腾讯企业标准的要求,产品兼容性良好,性能卓越。 …

armsom产品Debian系统开发

第一章 构建 Debian Linux 系统 我们需要按【armsom产品编译&烧录Linux固件】全自动编译一次,默认是编译 Buildroot 系统,也会编 译 uboot 和内核,buildroot 某些软件包依赖内核,所以我们必须编译内核再编译 Buildroot。同 理…

[Linux] 进程信号概念 | 信号产生

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 为什么我的课设这么难…

小程序测试的测试内容有哪些?

在数字化快速发展的今天,小程序成为了很多企业进行产品推广和服务互动的重要平台。小程序的广泛应用使得对其质量的要求越来越高,小程序测试应运而生。这一过程不仅涉及功能的准确性,更涵盖了用户体验、性能、安全等多个维度。 小程序测试的…

使用 NVIDIA DALI 计算视频的光流

引言 光流(Optical Flow)是计算机视觉中的一种技术,主要用于估计视频中连续帧之间的运动信息。它通过分析像素在时间维度上的移动来预测运动场,广泛应用于目标跟踪、动作识别、视频稳定等领域。 光流的计算传统上依赖 CPU 或 GP…

微积分复习笔记 Calculus Volume 2 - 4.4 The Logistic Equation

4.4 The Logistic Equation - Calculus Volume 2 | OpenStax

双指针---有效三角形的个数

这里写自定义目录标题 题目链接 [有效三角形的个数](https://leetcode.cn/problems/valid-triangle-number/description/)问题分析代码解决执行用时 题目链接 有效三角形的个数 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例…

【Linux】usb内核设备信息

usb内核设备信息 Linux内核中USB设备信息及拓扑结构可以从/sys/kernel/debug/usb/devices和/sys/bus/usb/devices中获取,下面介绍这些信息如何解读。 通过usbdump函数打印usb信息 [drivers/usb/core/devices.c] #define ALLOW_SERIAL_NUMBER/* Bus: 总线编号 Lev:…

Electron-Vue 开发下 dev/prod/webpack server各种路径设置汇总

背景 在实际开发中,我发现团队对于这几个路径的设置上是纯靠猜的,通过一点点地尝试来找到可行的路径,这是不应该的,我们应该很清晰地了解这几个概念,以下通过截图和代码进行细节讲解。 npm run dev 下的路径如何处理&…

devops和ICCID简介

Devops DevOps(Development 和 Operations 的组合)是一种软件开发和 IT 运维的哲学,旨在促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它强调自动化流程,持续集成(CI&#xf…

[HNCTF 2022 Week1]baby_rsa

源代码: from Crypto.Util.number import bytes_to_long, getPrime from gmpy2 import * from secret import flag m bytes_to_long(flag) p getPrime(128) q getPrime(128) n p * q e 65537 c pow(m,e,n) print(n,c) # 62193160459999883112594854240161159…

12.19问答解析

概述 某中小型企业有四个部门,分别是市场部、行政部、研发部和工程部,请合理规划IP地址和VLAN,实现企业内部能够互联互通,同时要求市场部、行政部和工程部能够访问外网环境(要求使用OSPF协议),研发部不能访问外网环境…

生态学研究中,森林生态系统的结构、功能与稳定性是核心研究

在生态学研究中,森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性,还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…

springboot445新冠物资管理(论文+源码)_kaic

摘 要 使用旧方法对新冠物资管理的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在新冠物资管理的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的新冠物资管…

1.zabbix概述

一、什么是监控 我们的生活里,离不开监控,监控能够最大程度上,发挥如下作用 实时监测,即使你不在电脑前,也能实时掌握监控区域情况,提高工作效率事后录像查询,如果不法事件未能即使发现制止&am…

QT绘图【点】【线】【圆】【矩形】

目录 1. 绘制点、线、圆、文本、矩形3. 调用及更新 1. 绘制点、线、圆、文本、矩形 QPainter painter(this); //实例化绘图 QPen pen(QColor(255,100,155)); //创建绘图工具(画笔) pen.setWidth(2); //画笔宽度 pen.setStyle(Qt::SolidLine); //实线…