When I tried to change the window icon in the top left corner from the ugly red “TK” to my own favicon using the code below, Python threw an error:
from tkinter import *
root = Tk()
#some buttons, widgets, a lot of stuff
root.iconbitmap('favicon.ico')
This should set the icon to ‘favicon.ico’ (according to a lot of forum posts all over the web). But unfortunately, all this line does is throw the following error:
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
What I already did:
- I checked the path – everything is 100% correct
- I tried other file formats like
.pngor.bmp– none worked - I looked this problem up on many websites
And for the third point, effbot.org, my favorite site about Tkinter, told me that Windows ignores the iconbitmap function.
But this doesn’t explain why it throws an error!
There are some “hackish” ways to avoid that issue, but none of them are Written for Python 3.x.
So my final question is: Is there a way to get a custom icon using Python 3.x and Tkinter?
Also, don’t tell me I should use another GUI Library. I want my program to work on every platform. I also want a coded version, not a py2exe or sth solution.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You need to have favicon.ico in the same folder or dictionary as your script because python only searches in the current dictionary or you could put in the full pathname. For example, this works:
from tkinter import * root = Tk() root.iconbitmap(r'c:Python32DLLspy.ico') root.mainloop()
But this blows up with your same error:
from tkinter import *
root = Tk()
root.iconbitmap('py.ico')
root.mainloop()
Method 2
No way what is suggested here works – the error “bitmap xxx not defined” is ever present. And yes, I set the correct path to it.
What it did work is this:
imgicon = PhotoImage(file=os.path.join(sp,'myicon.gif'))
root.tk.call('wm', 'iconphoto', root._w, imgicon)
where sp is the script path, and root the Tk root window.
It’s hard to understand how it does work (I shamelessly copied it from fedoraforums) but it works
Method 3
This works for me with Python3 on 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'))
Method 4
Got stuck on that too…
Finally managed to set the icon i wanted using the following code:
from tkinter import *
root.tk.call('wm', 'iconphoto', root._w, PhotoImage(file='resources/icon.png'))
Method 5
#!/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()
it should work like this !
Method 6
Make sure the .ico file isn’t corrupted as well. I got the same error which went away when I tried a different .ico file.
Method 7
Both codes are working fine with me on python 3.7….. hope will work for u as well
import tkinter as tk
m=tk.Tk()
m.iconbitmap("myfavicon.ico")
m.title("SALAH Tutorials")
m.mainloop()
and do not forget to keep “myfavicon.ico” in the same folder where your project script file is present
Another method
from tkinter import *
m=Tk()
m.iconbitmap("myfavicon.ico")
m.title("SALAH Tutorials")
m.mainloop()
[*NOTE:- python version-3 works with tkinter and below version-3 i.e version-2 works with Tkinter]
Method 8
from tkinter import *
from PIL import ImageTk, Image
Tk.call('wm', 'iconphoto', Tk._w, ImageTk.PhotoImage(Image.open('./resources/favicon.ico')))
The above worked for me.
Method 9
I had the same problem too, but I found a solution.
root.mainloop()
from tkinter import *
# must add
root = Tk()
root.title("Calculator")
root.iconbitmap(r"image/icon.ico")
root.mainloop()
In the example, what python needed is an icon file, so when you dowload an icon as .png it won’t work cause it needs an .ico file. So you need to find converters to convert your icon from png to ico.
Method 10
Try this:
from tkinter import *
import os
import sys
root = Tk()
root.iconbitmap(os.path.join(sys.path[0], '<your-ico-file>'))
root.mainloop()
Note: replace <your-ico-file> with the name of the ico file you are using otherwise it won’t work.
I have tried this in Python 3. It worked.
Method 11
So it looks like root.iconbitmap() only supports a fixed directory.
sys.argv[0] returns the directory that the file was read from so a simple code would work to create a fixed directory.
import sys
def get_dir(src):
dir = sys.argv[0]
dir = dir.split('/')
dir.pop(-1)
dir = '/'.join(dir)
dir = dir+'/'+src
return dir
This is the output
>>> get_dir('test.txt')
'C:/Users/Josua/Desktop/test.txt'
EDIT:
The only issue is that this method dosn’t work on linux
<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="13797c6066725361726063717661616a637a">[email protected]</a>:~ $ 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] '' >>>
Method 12
I recently ran into this problem and didn’t find any of the answers very relevant so I decided to make a SO account for this.
Solution 1: Convert your .ico File online there are a lot of site out there
Solution 2: Convert .ico File in photoshop
If you or your Editor just renamed your image file to *.ico then it is not going to work.
If you see the image icon from your Windows/OS folder then it is working
Method 13
I’m using Visual Studio Code. To make “favicon.ico” work, you need to specify in which folder you are working.
- You press ctrl + shift + p to open the terminal
cmd+shift+pon OSX. - In the terminal, you type: cd + the path where you are working. For example: cd C:UserDesktopMyProject
Method 14
CONVERT YOUR IMAGE FILE INTO A PHOTO IMAGE FIRST
img = PhotoImage(file='your-icon')
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0