web-dev-qa-db-fra.com

PyQt4 définir l'icône de la barre des tâches de Windows

Je travaille sur une application dans PyQt4 de Python et je ne trouve pas comment changer l'icône de la barre des tâches. J'ai créé mes fichiers .ui dans Qt's Designer, où je peux changer les propriétés windowIcon. Mais ce n'est pas ce que je recherche. Je souhaite modifier l'apparence de l'icône de l'application dans la barre des tâches de Windows. Pour l'instant, c'est Python dans une icône de fenêtre.

J'ai trouvé des informations sur SO: link mais cela ne m'aide pas beaucoup.

J'ai essayé:

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

Mais l'icône reste inchangée.

Ce que je veux changer, montrant l'image: (Cela se fait en appelant le setWindowIcon sur la fenêtre/boîte de dialogue principale, ou l'application, comme indiqué ci-dessus.)

Taskbar icon change

25
Marko

Ce problème est dû à certaines particularités dans la façon dont les icônes de la barre des tâches sont gérées sur la plate-forme Windows.

Voir cette réponse pour plus de détails, ainsi qu'une solution de contournement utilisant ctypes.

19
ekhumoro

Il me semble que le problème peut être dû au manque d'icône de bonne taille. La configuration suivante a fonctionné pour moi dans 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)

J'ai une icône de barre des tâches dans Windows 7 et des icônes correctes dans toutes les fenêtres sans aucune modification des fichiers ui.

11
Slawek Rewaj

Pour moi, le code suivant fonctionne à la fois pour changer l'icône de la barre des tâches et l'icône de la fenêtre

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

Vous devez appeler setWindowIcon (...) sur la fenêtre, pas sur l'application.

Voici un exemple, qui fonctionne pour moi:

#!/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
Jeremiah