33
votes

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

4
What platform are you on? And why doesn't that SO link help you?ekhumoro
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.Avaris
@ekhumoro 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.Marko
@Marko. But did you read the accepted answer and try the suggested workaround?ekhumoro
@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.Avaris

4 Answers

25
votes

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.

17
votes

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.

4
votes

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:])
3
votes

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

win.setWindowIcon(QIcon('logo.png'))