为什么在设置窗口图标时没有定义.ico 文件?

新手上路,请多包涵

当我尝试使用下面的代码将左上角的窗口图标从丑陋的红色“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

我已经做了什么:

  • 我检查了路径——一切都是 100% 正确的
  • 我尝试了其他文件格式,例如 .png.bmp - 都没有用
  • 我在很多网站上查过这个问题

对于第三点,我最喜欢的 Tkinter 网站 effbot.org 告诉我 Windows 会忽略 iconbitmap 函数。但这并不能解释为什么它会抛出错误!

有一些“hackish”方法可以避免该问题,但它们都不是为 Python 3.x 编写的。

所以我的最后一个问题是:有没有办法使用 Python 3.x 和 Tkinter 获得自定义图标?

另外,不要告诉我应该使用另一个 GUI 库。我希望我的程序可以在每个平台上运行。我还想要一个编码版本,而不是 py2exesth 解决方案。

原文由 CrushedPixel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

您需要将 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()

原文由 user2555451 发布,翻译遵循 CC BY-SA 4.0 许可协议

此处建议的方法绝不会起作用 - 错误“位图 xxx 未定义”一直存在。是的,我设置了正确的路径。

它的作用是 这样 的:

 imgicon = PhotoImage(file=os.path.join(sp,'myicon.gif'))
root.tk.call('wm', 'iconphoto', root._w, imgicon)

其中 sp 是脚本路径, root Tk 根窗口。

很难理解它是如何工作的(我无耻地从 fedoraforums 复制了它)但它确实有效

原文由 alessandro 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题