Setting the Windows taskbar icon in PyQt
Asked Answered
K

4

42

I'm working on an applcation in Python's PyQt4 and cannot find how to change the taskbar icon. I made my .ui files in Qt's Designer, where I can change the windowIcon properties. But that is not what I am looking for. I want to change the look of the application's icon in windows taskbar. For now it is Python logo in a window icon.

I found some information on SO: link but it's not helping me much.

I tried:

app = QtGui.QApplication([])
app.setWindowIcon(QtGui.QIcon('chip_icon_normal.png'))
app.exec_()

But the icon remains unchanged.

What i want to change, showing the picture: (This is done calling the setWindowIcon on main window/ dialog, or the application, as shown above.)

Taskbar icon change

Katerine answered 14/9, 2012 at 22:12 Comment(8)
What platform are you on? And why doesn't that SO link help you?Remsen
If you are not looking for the icon defined by windowIcon, I'm not sure which icon you are looking for. A screenshot would help.Wivina
@Remsen I have Python 2.7 on Windows 8 64bit, using PyQt4. And that link doesn't help me because it changes the window left top corner icon, not the one in the taskbar, as shown in the edited post.Katerine
@Marko. But did you read the accepted answer and try the suggested workaround?Remsen
@Remsen Thanks and brilliant. I didn't read it well beforehand! Please submit an answer, so I can award you the bounty!Katerine
@Marko: Alternatively, if you convert your app to an exe with its own icon (with py2exe or pyinstaller), that also solves the issue. Just a heads up, if you were planning on doing this in the end.Wivina
@Wivina Infact that is something that I am planning to do. What you said, was very useful, and if I understand it means, if I am going to make an exe file, I can freely remove those added lines? And it's is like somekind of a "bug" or something.Katerine
@Marko: Yes, you can leave out those lines for the exe package. This issue can be considered as a bug, probably solvable in the pythonw.exe side. That answer explains it quite well actually.Wivina
R
35

This problem is caused by some peculiarities in how taskbar icons are handled on the Windows platform.

See this answer for details, along with a workaround using ctypes.

Remsen answered 21/9, 2012 at 0:31 Comment(0)
P
18

It seems to me that the problem may be caused by lack of icon with the right size. The following setup worked for me in 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)

I have got a task bar icon in Windows 7 and correct icons in all windows without any changes to ui files.

Pearlypearman answered 24/1, 2014 at 10:32 Comment(3)
did not give me a taskbar icon in windows 10Fathomless
Not working unfortunately. On windows 10.Cundiff
didn't work for me on PySide2/windows11 eitherLevantine
C
9

You need to call setWindowIcon(...) on the window, not on the application.

Here's an example, which works for me:

#!/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:])
Ce answered 15/9, 2012 at 0:52 Comment(3)
No, setting an icon for QApplication is fine. It defines the default icon. Any window that doesn't specify an icon will use that. See docsWivina
@Ce i don't know if it would work, because i initialize my code differently, but i think that you do the same, with setWindowIcon method, but it's the small icon in the left top corner of the window if i'm not mistaken?Katerine
Actually, my answer won't solve the problem. I just now tried removing the self.setWindowIcon(...) in the __init__() method, and called app.setWindowIcon(...) inside of main instead, and it works, as Avaris said. I have no explanation why it would work for me, but not for Marko.Ce
S
3

For me, the following code works for both changing task bar icon and window icon

win.setWindowIcon(QIcon('logo.png'))
Serrulate answered 21/4, 2017 at 5:57 Comment(2)
Welcome to StackOverflow! You are answering a very old question which already has an answer. The OP has already tried your code, but it wasn't working in his case.Vallie
@Serrulate Same as Kamyar, except you are right for PyQt5 it now handles it cross platform using setWindowIcon()Gowan

© 2022 - 2024 — McMap. All rights reserved.