J'essaie de définir une icône d'application (python3/tkinter) comme ceci:
Interface()
root.title("Quicklist Editor")
root.iconbitmap('@/home/jacob/.icons/qle_icon.ico')
root.resizable(0, 0)
root.mainloop()
peu importe ce que je fais, je reçois toujours un message d'erreur (inactif) disant:
return self.tk.call('wm', 'iconbitmap', self._w, bitmap)
_tkinter.TclError: error reading bitmap file "/home/jacob/.icons/qle_icon.ico"
Qu'est-ce que je fais mal?
Le problème n'est pas le code, mais l'icône. J'ai essayé de créer un xbm
avec un autre programme que Gimp (un éditeur d'icônes de KDE), et bien qu'il semble terriblement laid, il affiche une icône. Je suppose que je dois trouver un créateur qui donne une icône "compréhensible" pour mon programme Python.
La méthode iconbitmap
s'est avérée être uniquement en noir et blanc, elle était donc inutile après tout.
Après une longue recherche, j'ai trouvé la solution pour définir la couleur de l'icône d'une application pour Python 3 (sous Linux). Je l'ai trouvée ici :
root = Tk()
img = PhotoImage(file='your-icon')
root.tk.call('wm', 'iconphoto', root._w, img)
C'est une vieille question, et il y a beaucoup de choses écrites à ce sujet sur le Web, mais tout cela est soit incorrect, soit incomplet, donc après l'avoir fait fonctionner, j'ai pensé qu'il serait bon d'enregistrer mon code de travail réel ici.
Tout d'abord, vous devrez créer une icône et l'enregistrer sous deux formats: Windows "ico" et Unix "xbm". 64 x 64 est une bonne taille. XBM est un format 1 bit - pixels juste allumés ou éteints, donc pas de couleurs, pas de gris. Les implémentations Linux de tkinter n'acceptent que XBM même si chaque bureau Linux prend en charge de vraies icônes, vous n'avez donc pas de chance. En outre, la spécification XBM est ambiguë quant à savoir si les bits "on" représentent le noir ou le blanc, vous devrez donc peut-être inverser le XBM pour certains bureaux. Gimp est bon pour les créer.
Ensuite, pour mettre l'icône dans votre barre de titre, utilisez ce code (Python 3):
import os
from tkinter import *
from tkinter.ttk import *
root = Tk()
root.title("My Application")
if "nt" == os.name:
root.wm_iconbitmap(bitmap = "myicon.ico")
else:
root.wm_iconbitmap(bitmap = "@myicon.xbm")
root.mainloop()
J'ai essayé cela et je n'ai pas pu le faire fonctionner avec Windows 7.
Trouvé un correctif.
Utilisez la réponse de Jacob, mais le fichier doit être un .gif
si vous utilisez mon système d'exploitation, (Windows 7), il apparaît.
Faire un gif 64x64 en utilisant MS Paint, l'enregistrer, utiliser le chemin du fichier et le bingo, ça marche.
Cela vous permettra d'utiliser des fichiers PNG sous forme d'icônes et rendra la couleur. Je l'ai testé sur Xubuntu 14.04, 32 bits avec Python 3.4 (root
est votre Tk
objet):
import sys, os
program_directory=sys.path[0]
root.iconphoto(True, PhotoImage(file=os.path.join(program_directory, "test.png")))
(La recherche du répertoire du programme est importante si vous voulez qu'il recherche test.png
au même emplacement dans tous les contextes. os.path.join
est un moyen multiplateforme d'ajouter test.png
dans le répertoire du programme.)
Si vous changez Vrai en Faux, il n'utilisera pas la même icône pour les fenêtres qui ne sont pas les principales.
Veuillez me faire savoir si cela fonctionne sur Windows et Mac.
J'espère que cela vous aide pour la capacité multiplateforme
LOGO_PATH="pic/logo.ico"
LOGO_LINUX_PATH="@pic/logo_1.xbm" #do not forget "@" symbol and .xbm format for Ubuntu
root = Tk()
if detect_screen_size().detect_os()=="Linux":
root.iconbitmap(LOGO_LINUX_PATH)
else:
root.iconbitmap(LOGO_PATH)