我试图像这样设置一个应用程序图标(python3 / tkinter):
Interface()
root.title("Quicklist Editor")
root.iconbitmap('@/home/jacob/.icons/qle_icon.ico')
root.resizable(0, 0)
root.mainloop()
无论我做什么,我都会收到一条错误消息(闲置),说:
return self.tk.call('wm', 'iconbitmap', self._w, bitmap)
_tkinter.TclError: error reading bitmap file "/home/jacob/.icons/qle_icon.ico"
我究竟做错了什么?
问题不是代码,而是图标。我尝试使用另一个程序创建一个xbm
而不是Gimp(一些KDE图标编辑器),虽然它看起来很可怕,但它确实显示了一个图标。我想我必须找到一个为我的Python程序提供“可理解”图标的创建者。
iconbitmap
方法结果只是黑色和白色,所以它毕竟没用。
经过长时间的搜索,我找到了为Python 3设置应用程序图标颜色的解决方案(在Linux上)。我发现它here:
root = Tk()
img = PhotoImage(file='your-icon')
root.tk.call('wm', 'iconphoto', root._w, img)
这是一个古老的问题,网上有很多关于它的内容,但所有这些都是不正确或不完整的,所以让它开始工作我认为在这里记录我的实际工作代码会很好。
首先,您需要创建一个图标并将其保存为两种格式:Windows“ico”和Unix“xbm”。 64 x 64是一个很好的尺寸。 XBM是一种1位格式 - 像素只是打开或关闭,所以没有颜色,没有灰色。 tkinter的Linux实现只接受XBM,即使每个Linux桌面都支持真实图标,所以你只是运气不好。此外,XBM规范对于“on”位是表示黑色还是白色是不明确的,因此您可能必须将某些桌面的XBM反转。 Gimp很适合创造这些。
然后将图标放在标题栏中,使用此代码(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()
我试过这个,我无法使用Windows 7工作。
找到了解决办法。
使用Jacob的答案,但如果您使用我的操作系统,则该文件必须是.gif
(Windows 7)。
使用MS绘制一个64x64 gif,保存它,使用文件路径和宾果,工作。
这将允许您将PNG文件用作图标,并且它确实呈现颜色。我在Xubuntu 14.04上测试了它,32位用Python 3.4(root
是你的Tk
对象):
import sys, os
program_directory=sys.path[0]
root.iconphoto(True, PhotoImage(file=os.path.join(program_directory, "test.png")))
(如果您希望在所有上下文中的相同位置搜索test.png
,查找程序目录很重要.os.path.join
是一种将test.png
添加到程序目录中的跨平台方法。)
如果将True更改为False,则不会对不是主窗口的窗口使用相同的图标。
如果这适用于Windows和Mac,请告诉我。