Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x tkinter Tcl错误:读取位图文件时出错_Python 3.x_Icons_Tkinter_Launcher - Fatal编程技术网

Python 3.x tkinter Tcl错误:读取位图文件时出错

Python 3.x tkinter Tcl错误:读取位图文件时出错,python-3.x,icons,tkinter,launcher,Python 3.x,Icons,Tkinter,Launcher,我正在尝试设置一个应用程序图标(python3/tkinter),如下所示: Interface() root.title("Quicklist Editor") root.iconbitmap('@/home/jacob/.icons/qle_icon.ico') root.resizable(0, 0) root.mainloop() 无论我做什么,我总是收到一条错误消息(Idle),说: 我做错了什么?问题不在于代码,而在于图标。我试着用另一个程序而不是Gimp(一些KDE图标编辑器)创

我正在尝试设置一个应用程序图标(python3/tkinter),如下所示:

Interface()
root.title("Quicklist Editor")
root.iconbitmap('@/home/jacob/.icons/qle_icon.ico')
root.resizable(0, 0)
root.mainloop()
无论我做什么,我总是收到一条错误消息(Idle),说:


我做错了什么?

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


编辑
iconbitmap
方法原来只是黑白的,所以它毕竟是无用的

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


这是一个老生常谈的问题,网上有很多关于它的文章,但都是不正确的或不完整的,所以在它开始工作后,我认为最好在这里记录我的实际工作代码

首先,您需要创建一个图标并将其保存为两种格式:Windows“ico”和Unix“xbm”。64 x 64是个不错的尺寸。XBM是一种1位格式——像素只是开或关,所以没有颜色,没有灰度。tkinter的Linux实现只接受XBM,即使每个Linux桌面都支持真正的图标,所以你在那里运气不好。此外,XBM规范对于“on”位表示黑色还是白色也不明确,因此对于某些台式机,您可能必须反转XBM。Gimp很适合创建这些

然后,要将图标放在标题栏中,请使用以下代码(Python 3):


我试过这个,但在Windows7下无法运行

找到了解决办法

使用Jacob的答案,但如果您使用的是my OS(Windows 7),则文件必须是
.gif


使用MS paint制作一个64x64 gif,保存它,使用文件路径和宾果,效果良好

这将允许您使用PNG文件作为图标,并渲染颜色。我用Python3.4在Xubuntu 14.04上测试了它,32位(
root
是您的
Tk
对象):

(如果您想让程序目录在所有上下文中在同一位置搜索
test.png
,则查找程序目录非常重要。
os.path.join
是一种跨平台的方法,可以将
test.png
添加到程序目录中。)

如果将True更改为False,则它不会在非主窗口的窗口中使用相同的图标


请让我知道这是否适用于Windows和Mac。

我希望这对您的跨平台能力有所帮助

LOGO_PATH="pic/logo.ico"
LOGO_LINUX_PATH="@pic/logo_1.xbm"  #do not forget "@" symbol and .xbm format for Ubuntu 
root = Tk()
    if detect_screen_size().detect_os()=="Linux":
        root.iconbitmap(LOGO_LINUX_PATH)
    else:
        root.iconbitmap(LOGO_PATH)

简单地使用r字符串将目录转换为原始文本对我来说很有用:

例:

app.iconbitmap(r'在此处输入路径')


我相信
.ico
文件对此不起作用(至少在linux上是这样)。尝试改用
.xbm
.xpm
文件……谢谢!不幸的是也没用,也试过了。png@Jacob愚蠢的问题:你的图标真的在/home/jacob/.icons/qle_icon.ico吗?)@gary绝对不是一个愚蠢的问题,我检查了几次,当事情不起作用时,人们开始怀疑自己……Python 2.7也适用!我已经找了好几天了。Thxim试图这么做,但我得到了这个“回溯”(最近一次调用最后一次):文件“C:\Python27\Calc.pyw”,第58行,在img=PhotoImage(File='icon!.ico')文件“C:\Python27\lib\lib tk\Tkinter.py”,第3244行,在init Image中,在init self.tk.call(('image','create',imgtype,name,)+选项)中,Tcl错误:无法识别图像文件“icon!.ico”中的数据
Tkinter.PhotoImage
的文档说明它只接受
gif
PPM/PGM
格式的图像。在linux机器上,它使用
.gif
对我有效,但在windows上使用
.png
对我无效。使用PIL-pillow-2.5.1-win32-py27。你应该使用
root.iconphoto(True,img)
,而不是调用tk。这是真实的生活吗?Linux上的Tk只支持垃圾图标?作为奖励,它不支持本地Gtk或qt小部件。怎么会有人把它当作GUI库来认真对待呢?你得给我更多的信息。比如给我指出你的代码和图标文件。
root = Tk()
img = PhotoImage(file='your-icon')
root.tk.call('wm', 'iconphoto', root._w, img)
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()
import sys, os
program_directory=sys.path[0]
root.iconphoto(True, PhotoImage(file=os.path.join(program_directory, "test.png")))
LOGO_PATH="pic/logo.ico"
LOGO_LINUX_PATH="@pic/logo_1.xbm"  #do not forget "@" symbol and .xbm format for Ubuntu 
root = Tk()
    if detect_screen_size().detect_os()=="Linux":
        root.iconbitmap(LOGO_LINUX_PATH)
    else:
        root.iconbitmap(LOGO_PATH)