Définir l'icône de la fenêtre
quand J'ai essayé de changer l'icône de la fenêtre dans le coin supérieur gauche de la laide rouge "TK" à mon propre favicon en utilisant le code ci-dessous, Python a lancé une erreur:
from tkinter import *
root = Tk()
#some buttons, widgets, a lot of stuff
root.iconbitmap('favicon.ico')
l'icône devrait être "favicon".ico' (selon beaucoup de messages de forum partout dans le web). Mais malheureusement, cette ligne n'est à jeter l'erreur suivante:
Traceback (most recent call last):
File "d:ladvclientmainapp.py", line 85, in <module>
root.iconbitmap(bitmap='favicon.ico')
File "C:Python33libtkinter__init__.py", line 1637, in wm_iconbitmap
return self.tk.call('wm', 'iconbitmap', self._w, bitmap)
_tkinter.TclError: bitmap "favicon.ico" not defined
Ce que j'ai déjà fait:
- j'ai vérifié le chemin - tout est correct à 100%
- j'ai essayé d'autres formats de fichiers comme
.png
ou.bmp
- aucun n'a fonctionné - j'ai regardé ce problème sur de nombreux sites web
et pour le troisième point, effbot.org, mon site préféré sur Tkinter, m'a dit que Windows ignore le iconbitmap
fonction.
Mais cela n'explique pas pourquoi il déclenche une erreur!
il y a des façons "hackish" d'éviter ce problème, mais aucune n'est écrite pour Python 3.x.
donc ma dernière question Est: y a-t-il un moyen d'obtenir un icône personnalisée en utilisant Python 3.x et Tkinter?
aussi, ne me dites pas que je devrais utiliser une autre bibliothèque GUI. Je veux que mon programme fonctionne sur toutes les plateformes. Je veux aussi une version codée, pas un py2exe
ou sth
la solution.
7 réponses
Vous ne devez pas avoir favicon.ico
dans le même dossier que le script ou, à savoir, sur votre chemin. Mettre dans le chemin d'accès complet. Par exemple, cela fonctionne:
from tkinter import *
root = Tk()
root.iconbitmap(r'c:\Python32\DLLs\py.ico')
root.mainloop()
Mais ce coups avec la même erreur:
from tkinter import *
root = Tk()
root.iconbitmap('py.ico')
root.mainloop()
aucune façon ce qui est suggéré ici ne fonctionne - l'erreur "bitmap xxx Non défini" est toujours présente. Et oui, j'ai mis le chemin correct.
Qu'il travail est celle-ci:
imgicon = PhotoImage(file=os.path.join(sp,'myicon.gif'))
root.tk.call('wm', 'iconphoto', root._w, imgicon)
où sp
est le chemin de script, et root
la fenêtre racine de Tk.
il est difficile de comprendre comment cela fonctionne (je l'ai copié sans honte de fedoraforums) mais ça marche
#!/usr/bin/env python
import tkinter as tk
class AppName(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
self.quitButton = tk.Button(self, text='Quit', command=self.quit)
self.quitButton.grid()
app = AppName()
app.master.title('Title here ...!')
app.master.iconbitmap('icon.ico')
app.mainloop()
cela devrait fonctionner comme ça !
cela fonctionne pour moi avec Python3 sous Linux:
import tkinter as tk
# Create Tk window
root = tk.Tk()
# Add icon from GIF file where my GIF is called 'icon.gif' and
# is in the same directory as this .py file
root.tk.call('wm', 'iconphoto', root._w, tk.PhotoImage(file='icon.gif'))
les deux codes fonctionnent bien avec moi sur python 3.7..... hope travaillera aussi pour vous!--3-->
import tkinter as tk
m=tk.Tk()
m.iconbitmap("myfavicon.ico")
m.title("SALAH Tutorials")
m.mainloop()
une Autre méthode
from tkinter import *
m=Tk()
m.iconbitmap("myfavicon.ico")
m.title("SALAH Tutorials")
m.mainloop()
[*NOTE: - python version-3 fonctionne avec tkinter et sous la version-3 I. e version-2 works with Tkinter]
assurez-vous que le .ico fichier n'est pas corrompu. J'ai eu la même erreur qui s'est effacée quand j'ai essayé une autre .fichier ico.
de Sorte qu'il ressemble root.iconbitmap()
ne supporte qu'un répertoire fixe.
sys.argv[0]
renvoie le répertoire dans lequel le fichier a été lu afin qu'un code simple fonctionne pour créer un répertoire fixe.
import sys
def get_dir(src):
dir = sys.argv[0]
dir = dir.split('/')
dir.pop(-1)
dir = '/'.join(dir)
dir = dir+'/'+src
return dir
C'est la sortie
>>> get_dir('test.txt')
'C:/Users/Josua/Desktop/test.txt'
EDIT:
Le seul problème est que cette méthode ne fonctionne pas sous linux
josua@raspberrypi:~ $ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04) [GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.argv[0]
''
>>>