我可以将哪些文件格式用于tkinter图标?

时间:2017-03-09 21:15:21

标签: python python-2.7 tkinter .ico

我知道这可能很明显,但在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") 

感谢您回答我的问题,虽然我很抱歉不花更多时间研究这个问题,而不仅仅是问这里。

2 个答案:

答案 0 :(得分:4)

让我们先阅读文档!

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。如果没有给出,则返回位图。

     

在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是您的顶级窗口(TkToplevel的实例)。

  

在Windows操作系统上,支持其他标志:

wm iconbitmap window ?-default? ?image?
     

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

     

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

     

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

到目前为止,还不是非常具体,有用的答案。

我的结论

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

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

那么哪些图像是位图?

  1. xbmxpm(适用于 X Window系统

    根据我链接的Wikipedia article"位图"到上面:

      

    X Window System 黑白图像使用类似的xbm格式,为彩色图像使用xpm。   ...

  2. BMP file format

  3. Netpbm format

  4. .wbmp

  5. ILBM

    ...

  6. 所以大多数位图文件格式都是跨平台!换句话说,如果有人告诉您使用xbm图片作为图标,则可能无法在您的平台上运行,因为xbm X Window System 的位图。

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

    其他可能有用的文章

答案 1 :(得分:0)

我也很努力地寻找答案,但是最后我偷看了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。

所以最后我成功地通过以下两行使窗口图标(在带有TkVersion> = 8.6的GNU-linux上)正常工作:

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

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

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