【问题标题】:Which file formats can I use for tkinter icons?我可以为 tkinter 图标使用哪些文件格式?
【发布时间】:2017-07-31 00:58:18
【问题描述】:

我知道这可能很明显,但是在 tkinter 中你可以设置一个图标,但我发现很难找到一个。我只是想知道您是否必须对文件使用.ico 格式,或者是否有办法使用.png.jpeg 文件。

目前我有

window = Tkinter.Tk()
window.title("Weclome!")
window.geometry("200x300")
window.wm_iconbitmap("Icon.ico")
window.configure(background = "Black")

这就是我的全部设置,我只想知道第 4 行:

window.wm_iconbitmap("Icon.ico") 

感谢您回答我的问题,尽管我很抱歉没有花更多时间研究这个问题而不仅仅是在这里提问。

【问题讨论】:

    标签: python python-2.7 tkinter .ico


    【解决方案1】:

    我也一直在努力寻找答案,但最后我偷看了 idle3.6 的源代码,在那里我找到了以下代码:

    # set application icon
    icondir = os.path.join(os.path.dirname(__file__), 'Icons')
    if system() == 'Windows':
        iconfile = os.path.join(icondir, 'idle.ico')
        root.wm_iconbitmap(default=iconfile)
    else:
        ext = '.png' if TkVersion >= 8.6 else '.gif'
        iconfiles = [os.path.join(icondir, 'idle_%d%s' % (size, ext))
                     for size in (16, 32, 48)]
        icons = [PhotoImage(master=root, file=iconfile)
                 for iconfile in iconfiles]
        root.wm_iconphoto(True, *icons)
    

    我使用rummage 软件在idlelib 文件夹中的所有文件中搜索了.ico 和.png。

    所以最后我设法通过以下两行使窗口图标正常工作(在 GNU-linux 上,TkVersion>=8.6):

    icon = PhotoImage(master=root, file='icon.png')
    root.wm_iconphoto(True, icon)
    

    我将图标直接放在我的应用程序文件夹中。

    从空闲代码看来,在 Windows 上仍然只支持 .ico 文件。

    【讨论】:

    • 我不小心回答了我自己正在寻找的问题。不过,尽管这里问的问题略有不同,但我认为我的回答还是很有用的。
    【解决方案2】:

    让我们从阅读文档开始吧!

    effbot.org 的文档对iconbitmap(bitmap=None) 进行了以下说明

    设置或获取此窗口图标化时要使用的图标位图。某些窗口管理器(包括 Windows)会忽略此方法。

    请注意,此方法只能用于显示单色图标。要显示彩色图标,请将其放入Label 小部件中,然后改用iconwindow 方法显示。

    wm_iconbitmap

    这里是关于iconwindow(window=None)的文档:

    设置或获取图标窗口以在此窗口被图标化时用作图标。某些窗口管理器(包括 Windows)会忽略此方法。

    wm_iconwindow

    window

    The new icon window. If omitted, the current window is returned.
    

    根据这个other documentation,它实际上与(至少)Python 2.7、3.5 和 3.6 中tkinter 的同名方法的文档字符串说的相同:

    wm_iconbitmap(self, bitmap=None, default=None)

    将图标化小部件的位图设置为bitmap。如果给出 None,则返回位图。

    在 Windows 下,default 参数可用于为小部件和任何没有明确设置图标的后代设置图标。 default 可以是 .ico 文件的相对路径(例如:root.iconbitmap(default='myicon.ico'))。有关详细信息,请参阅 Tk 文档。

    这是原始的 Tk 文档:

    wm iconbitmap window ?bitmap?

    如果指定了位图,则它以 Tk 接受的标准格式命名位图(有关详细信息,请参阅Tk_GetBitmap 手册条目)。该位图被传递给窗口管理器以显示在窗口的图标中,并且该命令返回一个空字符串。如果为bitmap 指定了一个空字符串,则为window 取消任何当前的图标位图。如果指定了bitmap,则该命令返回一个空字符串。否则,它返回与window 关联的当前图标位图的名称,如果window 没有图标位图,则返回一个空字符串。

    根据我对Tcl 的理解,这里window 是您的顶级窗口(@98​​7654360@ 或Toplevel 的实例)。

    在 Windows 操作系统上,支持附加标志:

    wm iconbitmap window ?-default? ?image?
    

    如果给出-default 标志,则该图标将应用于尚未应用其他特定图标的所有顶级窗口(现有和未来)。

    除了位图图像类型之外,还接受包含有效 Windows 图标的任何文件的完整路径规范(通常是 .ico.icr 文件),或者外壳已为其分配图标的任何文件。

    Tcl 将首先测试文件是否包含图标,然后是否有分配的图标,最后,如果失败,则测试位图。

    到目前为止,答案不是很具体,因此很有帮助。


    我的结论

    当窗口图标化时,应使用iconbitmap 函数(或方法,取决于编程语言)为窗口设置bitmap 图像。

    在 Windows 上,您可以为任何包含 valid Windows icon 的文件(通常是 .ico.icr 文件)或 shell 为其分配了图标的任何文件设置完整路径规范.

    那么哪些图像是位图?

    1. xbmxpm(对于 X 窗口系统

      根据我将“位图”链接到上面的Wikipedia article

      X 窗口系统 使用类似的xbm 格式用于黑白 图像,xpm 用于彩色图像。 ...

    2. BMP file format

    3. Netpbm format

    4. .wbmp

    5. ILBM

      ...

    所以大多数位图文件格式不是跨平台的!换句话说,如果有人告诉您使用xbm 图像作为图标,它可能无法在您的平台上工作,因为xbmX Window System 的位图。

    注意:即使在这个答案之后,您仍然可能遇到问题!


    其他可能有用的文章

    【讨论】:

      猜你喜欢
      • 2017-02-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 2010-11-15
      • 1970-01-01
      • 2014-04-29
      相关资源
      最近更新 更多