【问题标题】:Python 3 tkinter iconbitmap error in ubuntuubuntu中的Python 3 tkinter iconbitmap错误
【发布时间】:2014-01-18 13:34:25
【问题描述】:

我有这个:

import tkinter
gui = tkinter.Tk()
gui.iconbitmap(default='/home/me/PycharmProjects/program/icon.ico')
gui.mainloop()`

但是当我运行时我得到一个错误提示

Traceback (most recent call last):
File "/home/spencer/PycharmProjects/xMinecraft/GUI.py", line 17, in <module>
gui.iconbitmap(default='/home/me/PycharmProjects/program/icon.ico')
File "/usr/lib/python3.3/tkinter/__init__.py", line 1638, in wm_iconbitmap
return self.tk.call('wm', 'iconbitmap', self._w, '-default', default)
_tkinter.TclError: wrong # args: should be "wm iconbitmap window ?bitmap?"`

我正在尝试使用 tkinter 设置我制作的窗口图标。我正在使用安装在 ubuntu 13.10 上的 Pycharm。我尝试了各种方法,从将 '/' 更改为 '\' 并在前面添加 Z://,因为那是我的分区名称。但我仍然收到错误,所以请帮忙。

【问题讨论】:

  • 为什么使用 tkinter 而不是最新的 GTK3? python-gtk-3-tutorial.readthedocs.org/en/latest
  • @Allendar:你是什么意思,已经确认它在 python 3 中不能很好地工作?它工作正常。
  • 我会试试 GTK3,谢谢大家。
  • 你显然没有在 Python 3 中使用 tkinter 很长时间了。在 Python 2 中对于全面的 GUI 开发来说并不是那么好。在 Python 3 中,它绝对是垃圾。我在这里并不悲观。这只是一个痛苦的现实。
  • @Allendar:你说已经确认 Tkinter 在 python 3 中不能正常工作。你能提供该确认的链接吗?我相信在工具包之间做出决定的人会从您的发现中受益。

标签: python ubuntu tkinter pycharm


【解决方案1】:

您需要将路径指定为第一个位置参数,或者使用关键字参数“位图”。它的文档记录很差,但是需要 bitmap 参数;你不能只给出default 关键字参数。事实上,bitmap 关键字参数在 python 3 中已经被移除了。

但是,您只能在 Windows 上使用 .ico 文件。在 ubuntu 和其他 linux 机器上,您需要使用 .xbm 文件,并且需要在其前面加上“@”

这应该仅适用于 Windows:

gui.iconbitmap('/home/me/PycharmProjects/program/icon.ico')

在 ubuntu 上,它需要是这样的:

gui.iconbitmap('@/home/me/PyCharmProjets/program/icon.xbm')

您不能只将 .ico 文件重命名为 .xbm,它们是完全不同的文件格式。

【讨论】:

  • @Phoenix:我不认为你说的是​​可能的。您可能会收到不同的错误,但不会收到相同的错误。
  • @Phoenix:是的,这是一个不同的错误。在回复您在 ubuntu 而不是 windows 上尝试此操作之前,我没有看到(由于 .ico 扩展名,我假设 windows)。你需要给它一个 .xbm 文件,而不是 .ico 文件。
  • 嗯,我转换为 .xbm,它全是黑色的,带有一点白色曲线。
  • @Phoenix:xbm 是一种单色格式——像素是黑色或白色。将彩色图像转换为 xbm 几乎总是会导致图像质量不佳。
  • 所以我不能有彩色图标?
【解决方案2】:

有趣的研究

png、svg、ico 无效

感谢 sqlitemanager,我在我的机器上找到了一个 xbm (xubuntu - Linux dist)

工具.xbm

注意@ - 代码是 Lutz “Programming Python” 第 1 章 tkinter103.py 的修改

from tkinter import *
from tkinter.messagebox import showinfo

def reply(name):
    showinfo(title='Reply', message='Hello %s!' % name)

top = Tk()
#img = PhotoImage(file='py-blue-trans-out.ico') #no

top.title('Echo')
top.iconbitmap('@tool.xbm') #yes
#top.iconphoto(True, PhotoImage(file='tool.xbm')) #no

Label(top, text="Enter your name:").pack(side=TOP)
ent = Entry(top)
ent.pack(side=TOP)
btn = Button(top, text="Submit", command=(lambda: reply(ent.get())))
btn.pack(side=LEFT)

top.mainloop()

【讨论】:

    【解决方案3】:

    仍然是 2018 年的高排名谷歌问题。 在 python3 中什么对我有用 是在 Windows 中使用 ico,在 Linux 中使用 gif:

    if ( sys.platform.startswith('win')): 
        gui.iconbitmap('logo_Wicon.ico')
    else:
        logo = PhotoImage(file='logo.gif')
        gui.call('wm', 'iconphoto', gui._w, logo)
    

    【讨论】:

    • 在 Ubuntu 20.04 (python3.6) 中尝试部分代码 程序列表中的右侧图标(在屏幕左侧),顶部面板中只有黑色和白色的拉伸图标(留给语言 - 设置 - ...)。有什么更新吗?
    【解决方案4】:

    有两种方法,

    1) 在 ubuntu 中使用 xbm 文件,因为 ubuntu 将无法读取 ico 文件。但这里的问题是 xbm 只能显示黑白图像。

    2) 使用 tkinter.photoimage 显示如下图标图像,

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

    这里的问题是 photoimage 只能读取 GIF 和 PGM/PPM 图像。

    在此处查看详细信息 - https://stackoverflow.com/a/11180300

    【讨论】:

      【解决方案5】:

      要在 linux 中显示彩色图标,您需要如下所示:

      import tkinter
      window = tkinter.Tk()
      window.title("My Application")
      img = tkinter.PhotoImage(file='~/pharmapos/pharmapos.png')
      window.tk.call('wm', 'iconphoto', window._w, img)
      window.mainloop()
      

      【讨论】:

        【解决方案6】:

        我必须转换为 XBM 格式并使用以下 root.iconbitmap('@imagename.xbm') 但是我的平台是 Ubuntu,我发现我的 os 主题没有适合他的图像......

        【讨论】:

          【解决方案7】:

          import tkinter gui = tkinter.Tk() gui.iconbitmap() gui.mainloop()

          代替 gui.iconbitmap(default='/home/me/PycharmProjects/program/icon.ico') 我使用了 gui.iconbitmap() 这对我有用。

          【讨论】:

            猜你喜欢
            • 2018-08-05
            • 1970-01-01
            • 1970-01-01
            • 2012-03-20
            • 1970-01-01
            • 1970-01-01
            • 2020-07-21
            • 1970-01-01
            相关资源
            最近更新 更多