tkinter TclError:读取位图文件时出错

问题描述 投票:17回答:4

我试图像这样设置一个应用程序图标(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"

我究竟做错了什么?

python-3.x icons tkinter launcher
4个回答
51
投票

问题不是代码,而是图标。我尝试使用另一个程序创建一个xbm而不是Gimp(一些KDE图标编辑器),虽然它看起来很可怕,但它确实显示了一个图标。我想我必须找到一个为我的Python程序提供“可理解”图标的创建者。


Edit

iconbitmap方法结果只是黑色和白色,所以它毕竟没用。

经过长时间的搜索,我找到了为Python 3设置应用程序图标颜色的解决方案(在Linux上)。我发现它here

root = Tk()
img = PhotoImage(file='your-icon')
root.tk.call('wm', 'iconphoto', root._w, img)

14
投票

这是一个古老的问题,网上有很多关于它的内容,但所有这些都是不正确或不完整的,所以让它开始工作我认为在这里记录我的实际工作代码会很好。

首先,您需要创建一个图标并将其保存为两种格式: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()

7
投票

我试过这个,我无法使用Windows 7工作。

找到了解决办法。

使用Jacob的答案,但如果您使用我的操作系统,则该文件必须是.gif(Windows 7)。

使用MS绘制一个64x64 gif,保存它,使用文件路径和宾果,工作。


5
投票

这将允许您将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,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.