【问题标题】:Using Tkinter command "iconbitmap" to set window icon使用 Tkinter 命令“iconbitmap”设置窗口图标
【发布时间】:2015-04-30 16:37:07
【问题描述】:

我有一个带有 Tkinter 窗口的程序,我想为该窗口设置一个图标。我使用这个代码:window.iconbitmap(os.path.dirname(os.path.abspath(__file__))+"/icon.png") 但抛出以下错误:

Traceback (most recent call last):
  File "myprogram.py", line 241, in <module>
    window.iconbitmap(os.path.dirname(os.path.abspath(__file__))+"/icon.png")
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1591, in wm_iconbitmap
    return self.tk.call('wm', 'iconbitmap', self._w, bitmap)
_tkinter.TclError: bitmap "/home/guest/documents/myprogramdir/icon.png" not defined

我认为这是因为我的图标文件与我的其余代码位于同一目录中。但这就是我想要的样子。有解决办法吗?

【问题讨论】:

    标签: python tkinter icons


    【解决方案1】:

    假设此错误在 Windows 操作系统中引发,问题是 iconbitmap 在 Windows 中似乎不支持 png 文件类型。请改用.ico 文件类型。这个网络工具对我来说非常棒 - https://iconverticons.com/online/。对于 Linux 操作系统,请使用 xbm 文件类型。

    PS- 下次提问时请提供相关细节。例如:出现此错误的操作系统的名称和版本。

    【讨论】:

    • 如果我想要一个适用于所有操作系统的图标文件?
    • 不幸的是,没有。您可能需要以某种方式编码以确定正在使用的操作系统平台并指定要使用的图标文件。请参阅stackoverflow.com/questions/1854/python-what-os-am-i-running-on/… 了解操作系统平台。
    • 在 Linux 上,当我将 icon.png 重命名为 icon.xbm 时,它会写入相同的错误。在 Windows 上,当我将 icon.png 重命名为 icon.ico 时,它也会写入相同的错误。您的应答器无法正常工作。
    • pngxbmico 文件类型具有不同的文件结构,因此简单的重命名当然无法胜任。您将不得不使用转换工具将一种文件类型转换为另一种文件类型。例如,使用iconverticons.com/onlinepng 转换为ico
    • 这个答案听起来很有希望。但不知何故,它在我的 Debian 变体(内核 4.9.235)上的 Python 2.7 上不起作用。我什至可以提供我的 xbm 图标,以防万一谁想测试它。只需将以下内容作为 3 行并将其保存到文本文件中:#define grin2_width 15 #define grin2_height 15 static unsigned char grin2_bits[] = { 0xE0, 0x03, 0x18, 0x0C, 0x04, 0x10, 0x32, 0x26, 0x4A, 0x29, 0x01, 0x40, 0xFD, 0x5F, 0x25, 0x72, 0x25, 0x52, 0x25, 0x52, 0x2A, 0x3A, 0x32, 0x26, 0xE4, 0x1B, 0x58, 0x0C, 0xE0, 0x03 };
    【解决方案2】:

    使用枕头库将文件转换为 ico 格式的代码。可用格式:https://pillow.readthedocs.io/en/latest/handbook/image-file-formats.html

    from PIL import Image
    filen = r'icon.png'
    img = Image.open(filen)
    img.save('icon.ico',format = 'ICO', sizes=[(32,32)])
    

    【讨论】:

      【解决方案3】:

      在 PyCharm 中 mainloop 之前添加

      app.iconbitmap(r'C:\Users\User\PycharmProjects\HelloWorld\my.ico')
      

      在控制台输入中

      pyinstaller --onefile -w -F -i "my.ico" my.py
      

      【讨论】:

        【解决方案4】:

        你可以设置你的图标目录,在你的代码的同一个文件夹中并不重要,例如我将我的图标保存在这个 aیdress C:\PYTHON\library\images 的图像文件夹中

        from tkinter import *

        win = Tk() win.iconbitmap('C:/PYTHON/library/images/book5.ico') win.mainloop()

        【讨论】:

        • 你好@noushin,谢谢你的回答。你说得对,图标的实际位置并不重要,我大约在六年前就发现了这一点:) 问题出在图标格式上,正如接受的答案中所解释的那样。
        【解决方案5】:

        路径前需要使用关键字“bitmap”或“default”:

        window.iconbitmap(bitmap="Icon path.ico")
        

        或:

        window.iconbitmap(default="Icon path.ico")
        

        如果您使用的是 Windows,“默认”选项将文件设置为图标,不仅适用于指定的窗口,而且适用于没有明确设置任何图标的所有后代。 请注意,您必须使用 .ico 文件(我曾尝试使用其他类型的文件,但没有成功)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-05
          • 2022-10-23
          • 2020-04-02
          • 2013-04-12
          • 1970-01-01
          • 1970-01-01
          • 2020-03-26
          • 2017-07-24
          相关资源
          最近更新 更多