在PyQt中设置Windows任务栏图标

40
我正在使用Python的PyQt4开发一个应用程序,但是找不到如何更改任务栏图标的方法。我在Qt Designer中制作了我的.ui文件,可以更改windowIcon属性,但这并不是我要找的。我想要更改Windows任务栏中应用程序图标的外观。目前它是一个带有Python标志的窗口图标。
我在Stack Overflow上找到了一些信息:link,但对我没有太大帮助。
我尝试过:
app = QtGui.QApplication([])
app.setWindowIcon(QtGui.QIcon('chip_icon_normal.png'))
app.exec_()

但是图标仍然没有改变。

我想要改变的是,显示如下图片: (这是通过调用主窗口/对话框或应用程序中的setWindowIcon完成的,如上所示。)

更改任务栏图标


你在哪个平台上?为什么那个SO链接对你没有帮助? - ekhumoro
如果您不是在寻找 windowIcon 定义的图标,则我不确定您正在寻找哪个图标。提供一个屏幕截图会很有帮助。 - Avaris
@ekhumoro 谢谢,太棒了。我之前没有好好阅读它!请提交一个答案,这样我就可以给你颁发奖励! - Marko
2
@Marko:或者,如果你使用py2exe或者pyinstaller将你的应用转换成一个带有自己图标的exe文件,那也能解决这个问题。只是提醒一下,如果你最终打算这样做的话。 - Avaris
@Marko:是的,你可以在exe包中省略那些行。这个问题可以被视为一个bug,可能可以在pythonw.exe方面解决。那个答案其实已经很好地解释了这个问题。 - Avaris
显示剩余3条评论
4个回答

31

这个问题是由于Windows平台处理任务栏图标的一些特殊性质引起的。

请参见此答案,其中包括使用ctypes的解决方法的详细信息。


18

我觉得问题可能是因为缺少合适大小的图标所导致的。 以下设置对于我在PyQT4中起作用:

# set app icon    
app_icon = QtGui.QIcon()
app_icon.addFile('gui/icons/16x16.png', QtCore.QSize(16,16))
app_icon.addFile('gui/icons/24x24.png', QtCore.QSize(24,24))
app_icon.addFile('gui/icons/32x32.png', QtCore.QSize(32,32))
app_icon.addFile('gui/icons/48x48.png', QtCore.QSize(48,48))
app_icon.addFile('gui/icons/256x256.png', QtCore.QSize(256,256))
app.setWindowIcon(app_icon)

我在Windows 7中有一个任务栏图标,在所有窗口中都有正确的图标,而没有对UI文件进行任何更改。


1
在Windows 10中,它没有为我提供任务栏图标。 - Flying Thunder
很遗憾,无法工作。在Windows 10上。 - Elad Weiss
在PySide2/Windows 11上对我也没有起作用。 - ninhenzo64
在PySide2/Windows 11上对我来说也没有起作用。 - undefined

8

您需要在窗口上调用setWindowIcon(...),而不是在应用程序上调用。

以下是一个例子,对我有效:

#!/usr/bin/env python3

import os
import sys
import subprocess
import os.path

from PyQt4 import QtGui
from PyQt4 import QtCore

class MyWin(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MyWin, self).__init__(parent)
        self.setWindowTitle("My Window")
        self.setWindowIcon(QtGui.QIcon('test_icon.png'))
        self.show()

def main(args):
    app = QtGui.QApplication([])

    ww= MyWin()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main(sys.argv[1:])

2
不,为 QApplication 设置图标是可以的。它定义了默认图标。任何没有指定图标的窗口都将使用它。请参阅文档 - Avaris
@Jeremiah 我不确定它是否有效,因为我初始化我的代码方式不同,但我认为你也是用setWindowIcon方法做同样的事情,但如果我没记错的话,那是窗口左上角的小图标? - Marko
实际上,我的答案并不能解决这个问题。我刚刚尝试在__init__()方法中删除self.setWindowIcon(...),并在main函数中调用app.setWindowIcon(...),就像Avaris所说的那样,它可以工作。我不知道为什么它对我有效,但对Marko无效。 - Jeremiah

3
对于我来说,以下代码可以同时改变任务栏图标和窗口图标。
win.setWindowIcon(QIcon('logo.png'))

4
欢迎来到StackOverflow!您正在回答一个非常古老的问题,该问题已经有了答案。原帖的作者已经尝试了您的代码,但在他的情况下它没有起作用。 - Kamyar Infinity
@user6657441 和Kamyar一样,只是你对于PyQt5是正确的,现在可以使用setWindowIcon()跨平台处理它。 - melMass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接