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 sys

class 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 sys

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

class 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来表示公司标识符。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C#】实现Json转Lua (Json2Lua)

关键词: C#、JsonToLua、Json2Lua、对象序列化Lua 前提需引入NewtonsofJson,引入方法可先在Visual Studio 2019 将Newtonsoft.Json.dll文件导入Unity的Plugins下。 Json格式字符串转Lua格式字符串,效果如下: json字符串 {"1": &q…

Windows平台C++部署 vcpkg 安装protobuf + gRPC实现图像传输

vcpkg 安装 https://github.com/microsoft/vcpkg.git.\bootstrap-vcpkg.bat vcpkg --version参考:Windows安装vcpkg教程(VS2022) protocbuf 安装与编译 vcpkg install grpc:x64-windowsprotocbuf 安装与编译 vcpkg install protobuf proto…

ScottPlot学习的常用笔记-02

ScottPlot学习的常用笔记-02 写在前面Why&Target:这里记一些杂项。上下文&背景 先记一下这几个小时的新收获先说一下,为什么可开发可视工具缩放的问题ScottPlot5.0起步.net Core: WinExe.Net Framework也是可以的 写在前面 Why&Target&…

CTF_1

CTF_Show 萌新赛 1.签到题 <?php if(isset($_GET[url])){system("curl https://".$_GET[url].".ctf.show"); }else{show_source(__FILE__); }?> 和 AI 一起分析 1.if(isset($_GET[url]))检查GET请求中是否存在名为url的参数。 curl 2.curl…

【Spring】Spring框架之-AOP

目录 1. AOP的引入 2. AOP相关的概念 2.1 AOP概述 2.2 AOP的优势 2.3. AOP的底层原理--目前先不具体阐述&#xff0c;后面讲 3. Spring的AOP技术-配置文件方式 3.1 AOP相关的术语 3.2 基本准备工作 3.3 AOP配置文件方式的入门 3.4 切入点的表达式 3.5 AOP的通知类型 …

我的2024年度总结

称着这个周末&#xff0c;写一篇2024年度总结&#xff0c;主要记录我过去一年的成长经历以及自己的一些收获。 过去一年的经历&#xff0c;可谓刻骨铭心&#xff0c;一个是24考研惨败&#xff0c;一个是毕设的准备&#xff0c;一个是省考的陪考&#xff0c;一个是找工作的焦虑…

Java 中的字符串

目录 Java 中的字符串字符串的创建字符串的比较字符串的拼接如何定义一个空的字符串 Java 中的字符串 字符串的创建 在 Java 中&#xff0c;可以通过以下几种方式创建字符串&#xff1a; 1.使用字符串字面量&#xff1a; String str "Hello, World!";2.使用 new…

数说故事聚焦“卖车”场景,推出AI汽车销售转化解决方案

没错&#xff0c;“卖车”我们也在行&#xff0c;为某车企“保住”了新车上市的订单。 深耕汽车行业多年&#xff0c;该车企10月份刚发布一款新能源车&#xff0c;其前期已经拥有了大量的保有客户和线上多渠道获取的潜在客户&#xff0c;然而&#xff0c;仍面临两大难题&#x…

javaEE-多线程编程-3

目录 java 常见的包 : 回调函数: 什么是线程: 第一个线程: 验证多线程执行: 内核: 调用sleep()方法: 执行结果分析: 线程创建的几种方式: 1.继承Thread类,重写run()方法. 2.实现Runnable接口,重写run()方法. 3.继承Thread类,重写run()方法.但使用匿名内部类 4.实现…

FFmpeg 框架简介和文件解复用

文章目录 ffmpeg框架简介libavformat库libavcodec库libavdevice库 复用&#xff08;muxers&#xff09;和解复用&#xff08;demuxers&#xff09;容器格式FLVScript Tag Data结构&#xff08;脚本类型、帧类型&#xff09;Audio Tag Data结构&#xff08;音频Tag&#xff09;V…

芯片级IO (Pad) Ring IP Checklist

SoC top顶层数字后端实现都会涉及到IO Ring &#xff08;PAD Ring&#xff09;的设计。这里面包括VDD IO,VDDIO IO, Signal IO, Corner IO&#xff0c;Filler IO&#xff0c;IO power cut cell等等。 数字后端零基础入门系列 | Innovus零基础LAB学习Day2 数字IC后端实现TOP F…

圣诞快乐(h5 css js(圣诞树))

一&#xff0c;整体设计思路 圣诞树h5&#xff08;简易&#xff09; 1.页面布局与样式&#xff1a; 页面使用了全屏的黑色背景&#xff0c;中央显示圣诞树&#xff0c;树形由三层绿色的三角形组成&#xff0c;每一层的大小逐渐变小。树干是一个棕色的矩形&#xff0c;位于三角…

Linux应用开发————mysql数据库表

mysql数据库表操作 查看表的结构 mysql> desc / describe 表名; 或者&#xff1a; mysql> show create table 表名; 常见数据库引擎&#xff1a; innodb, myISAM... 删除表 mysql> drop tabl…

移动网络(2,3,4,5G)设备TCP通讯调试方法

背景&#xff1a; 当设备是移动网络设备连接云平台的时候&#xff0c;如果服务器没有收到网络数据&#xff0c;移动物联设备发送不知道有没有有丢失数据的时候&#xff0c;需要一个抓取设备出来的数据和服务器下发的数据的方法。 1.服务器系统是很成熟的&#xff0c;一般是linu…

Unity中的委托和事件(UnityAction、UnityEvent)

委托和事件 &#x1f392;什么是委托&#xff0c;委托的关键字是Delegate&#xff0c;委托是一种函数的容器&#xff0c;运行将函数做为变量来进行传递 通过Delegate关键字我们声明了一个无参无返回的委托&#xff0c;通过这个委托我们可以存储无参无返回的函数 public deleg…

基于SpringBoot的“交流互动系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“交流互动系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能图 管理员登录界面图 个人信息界面图 个人…

LeetCode hot100-93

https://leetcode.cn/problems/longest-palindromic-substring/description/?envTypestudy-plan-v2&envIdtop-100-liked 5. 最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。状态定义 我们用一个二维数组 dp[i][j] 表示子串 s[i…j] 是否是回文&…

C语言入门指南:从零开始的编程之路

记得我刚开始接触编程时,也像很多初学者一样充满疑惑。编程看起来很神奇,但要如何开始呢?经过多年编程经验的积累,今天和大家分享如何入门C语言编程。 C语言诞生于1972年,由Dennis Ritchie在贝尔实验室开发。它的出现彻底改变了计算机编程的历史。虽然现在有很多更新的编程语…

详解Redis的String类型及相关命令

目录 SET GET MGET MSET SETNX SET和SETNX和SETXX对比 INCR INCRBY DECR DECRBY INCRBYFLOAT APPEND GETRANGE SETRANGE STRLEN 内部编码 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在&#xff0c;则覆盖&#xff0c;⽆论原来的数据类型是什么…

SpringBoot使用 AOP 实现自定义日志记录并保存在Mysql

本文主要介绍在 Spring Boot 中使用 AOP 实现自定义日志记录并保存在 Mysql 的方法。先阐述记录日志的重要性及传统方式的弊端&#xff0c;提出新方式&#xff0c;即通过创建自定义注解、切面类等&#xff0c;将重要日志存到数据库&#xff0c;还给出了创建日志表、注解类、切面…