[当我尝试使用下面的代码将左上角的窗口图标从难看的红色“ TK”更改为我自己的收藏夹图标时,Python引发了错误:
from tkinter import *
root = Tk()
#some buttons, widgets, a lot of stuff
root.iconbitmap('favicon.ico')
这应将图标设置为'favicon.ico'(根据网络上的许多论坛帖子)。但不幸的是,这行代码只会引发以下错误:
Traceback (most recent call last):
File "d:\ladvclient\mainapp.py", line 85, in <module>
root.iconbitmap(bitmap='favicon.ico')
File "C:\Python33\lib\tkinter\__init__.py", line 1637, in wm_iconbitmap
return self.tk.call('wm', 'iconbitmap', self._w, bitmap)
_tkinter.TclError: bitmap "favicon.ico" not defined
我已经做了:
.png
或.bmp
-均无效关于第三点,我最喜欢的Tkinter网站effbot.org告诉我Windows忽略了iconbitmap
函数。但这并不能解释为什么会引发错误!
[有一些“骇人”的方式可以避免该问题,但都不是针对Python 3.x编写的。
所以我的最后一个问题是:有没有办法使用Python 3.x和Tkinter获得自定义图标?
另外,不要告诉我我应该使用另一个GUI库。我希望我的程序可以在每个平台上运行。我也想要一个编码版本,而不是py2exe
或sth
解决方案。
您需要将favicon.ico
与脚本放在同一文件夹或词典中,因为python仅在当前词典中搜索,或者您可以输入完整的路径名。例如,这有效:
from tkinter import *
root = Tk()
root.iconbitmap(r'c:\Python32\DLLs\py.ico')
root.mainloop()
但是这会因相同的错误而崩溃:
from tkinter import *
root = Tk()
root.iconbitmap('py.ico')
root.mainloop()
我也遇到同样的问题,但我找到了解决方法。
root.mainloop()
from tkinter import *
# must add
root = Tk()
root.title("Calculator")
root.iconbitmap(r"image/icon.ico")
root.mainloop()
在示例中,python需要的是一个图标文件,因此当您在.png中下载图标时,它将无法工作,因为它需要一个图标文件。因此,您需要找到将图标形式png转换为ico的转换器。
奇怪的格式很抱歉,这是我第一次发表评论。
这里没有任何建议的方法起作用-始终存在错误“未定义位图xxx”。是的,我设置了正确的路径。
它did的工作是这样的:
imgicon = PhotoImage(file=os.path.join(sp,'myicon.gif'))
root.tk.call('wm', 'iconphoto', root._w, imgicon)
其中sp
是脚本路径,root
是Tk根窗口。
很难理解它是如何工作的(我从fedoraforums无耻地复制了它,但是它起作用了
这对我在Linux上的Python3有用:
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'))
也卡在那上面...
最终使用以下代码成功设置了我想要的图标:
from tkinter import *
root.tk.call('wm', 'iconphoto', root._w, PhotoImage(file='resources/icon.png'))
#!/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()
它应该像这样工作!
请确保.ico文件也未损坏。我尝试使用不同的.ico文件时遇到的错误消失了。
两个代码在python 3.7上都可以正常工作.....希望同样适用于您
import tkinter as tk
m=tk.Tk()
m.iconbitmap("myfavicon.ico")
m.title("SALAH Tutorials")
m.mainloop()
并且不要忘记将“ myfavicon.ico”保留在项目脚本文件所在的文件夹中
另一种方法
from tkinter import *
m=Tk()
m.iconbitmap("myfavicon.ico")
m.title("SALAH Tutorials")
m.mainloop()
[[*注意:-python版本3适用于tkinter,低于版本3,即版本2适用于Tkinter]
因此看起来root.iconbitmap()
仅支持固定目录。sys.argv[0]
返回从中读取文件的目录,因此使用简单的代码即可创建固定目录。
import sys
def get_dir(src):
dir = sys.argv[0]
dir = dir.split('/')
dir.pop(-1)
dir = '/'.join(dir)
dir = dir+'/'+src
return dir
这是输出
>>> get_dir('test.txt')
'C:/Users/Josua/Desktop/test.txt'
编辑:唯一的问题是此方法在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]
''
>>>
from tkinter import *
from PIL import ImageTk, Image
Tk.call('wm', 'iconphoto', Tk._w, ImageTk.PhotoImage(Image.open('./resources/favicon.ico')))
以上内容对我有用。