设置 Windows 7 任务栏图标的最佳方法是在 `PyQt4` 中设定应用程序的任务栏图标。

news/2024/12/23 1:30:06/

许多开发人员遇到使用 setWindowIcon 仅更改窗口左上角图标而未影响任务栏图标的问题。以下是解决方案,以及相关背景和步骤。

背景

在 Windows 7 中,任务栏图标关联的是“应用程序用户模型”,而不是单个应用程序窗口。Windows 会使用一些启发式方法来决定不同实例是否应该归属于同一个任务栏图标。例如,如果您有多个实例运行并且每个实例都有自己的图标,它们会被归属于单个任务栏图标。这也适用于所有由 pythonw.exe 托管的程序。因此,仅使用 setWindowIcon 改变窗口图标并不会影响任务栏图标。

解决方案

要正确设置任务栏图标,我们需要使用 Windows 的 API 明确定义应用程序的用户模型 ID(AppUserModelID)。这可以通过注册表配置,或者更简单地使用 Python 代码调用 Windows API。

方法

以下步骤展示了如何通过 ctypes 库在 Python 中设置 AppUserModelID,从而改变任务栏图标。

  1. 安装 PyQt4

    from PyQt4 import QtGui
    import ctypes
    
  2. 定义应用程序 ID 并设置任务栏图标

    # 定义 AppUserModelID
    myappid = u'mycompany.myproduct.subproduct.version'  # 任意字符串# 调用 Windows API 设置当前进程的 AppUserModelID
    ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)# 创建应用程序和主窗口
    app = QtGui.QApplication([])
    mainwindow = QtGui.QMainWindow()# 设置窗口图标
    app.setWindowIcon(QtGui.QIcon('chalk.ico'))
    mainwindow.setWindowIcon(QtGui.QIcon('chalk.ico'))
    mainwindow.show()# 运行应用程序主循环
    app.exec_()
    

注意事项

  • 必须在显示窗口前进行 SetCurrentProcessExplicitAppUserModelID 调用。
  • 确保 myappidunicode 字符串。
  • 如果需要进行跨平台兼容性检查,可以在调用 ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID 前添加操作系统类型检测(例如通过 os.name)。

http://www.ppmy.cn/news/1470774.html

相关文章

vue中的自定义指令

第1部分:引言 在Vue.js中,自定义指令提供了一种非常灵活的方式来扩展Vue的功能。它们允许开发者直接对DOM进行操作,响应数据变化,甚至与其他组件或库集成。 第2部分:Vue自定义指令概述 2.1 什么是Vue自定义指令 Vu…

第四章分类问题

目录 第五题 线性判别分析 (LDA) 概述 假设 公式 优点 缺点 二次判别分析 (QDA) 概述 假设 公式 优点 缺点 比较 第六题 ​编辑 ​编辑 第八题 逻辑回归 1-最近邻 比较与结论 第九题 第十二题 第五题 LDA(线性判别分析)和QDA&…

Docker run命令(3续)

命令格式: docker run [选项] 镜像 运行的容器名称 1.创建运行容器 #简单操作 docker run 镜像标识|镜像名称[:tag] #常用的参数 docker run -d -p 80:80 --name 自定义容器名称 镜像标识|镜像名称[:tag] 选项: -d 代表后台运行 -p 宿主机端口:容器…

面试突击:Java 中的泛型

本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。今天想和大家聊聊 Java 中的泛型。 什么是泛型? Java 泛型(Generics) 是 JDK 5…

【docker】docker启动neo4j,并配置内存

注意下:--volume宿主机目录:/data 和 --publish宿主机port:7474 --publish宿主机port:7687 docker run -d \ --publish9801:7474 --publish9802:7687 \ --env NEO4J_AUTHneo4j/passwd \ --volume/opt/docker/data/vol-data/neo4j4.2:/data \ --restart always \ --…

在 Equinix 上使用 MinIO 控制云数据成本

公有云改变了公司构建、部署和管理应用程序的方式,主要是向好的方向发展。在您刚开始使用时,公有云会提供基础架构、服务、支持和维护,以便快速启动和运行。它以几乎无限的方式提供最终的可伸缩性,无论应用程序的负载如何&#xf…

PostgreSQL源码分析——CREATE TYPE

create type 源码分析 PG中可以通过CREATE TYPE创建复合类型,我们分析一下其源码实现。 create type mytyp as (a int, b int);语法解析 exec_simple_query --> pg_parse_query--> raw_parser--> base_yyparse生成CompositeTypeStmt。定义如下&#xff…

程序猿成长之路之数据挖掘篇——决策树分类算法(1)——信息熵和信息增益

决策树不仅在人工智能领域发挥着他的作用,而且在数据挖掘中也在分类领域中独占鳌头。了解决策树的思想是学习数据挖掘中的分类算法的关键,也是学习分类算法的基础。 什么是决策树 用术语来说,决策树(Decision Tree)是…