我知道这可能很明显,但在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")
感谢您回答我的问题,虽然我很抱歉不花更多时间研究这个问题,而不仅仅是问这里。
答案 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文档:
如果指定了位图,则它会在Tk接受的标准格式中命名位图(有关详细信息,请参阅
Tk_GetBitmap
手册条目)。该位图被传递给窗口管理器以在窗口的图标中显示,并且该命令返回空字符串。如果为bitmap
指定了空字符串,则会取消window
的任何当前图标位图。如果指定了bitmap
,则该命令将返回空字符串。否则,它返回与window
关联的当前图标位图的名称,如果window
没有图标位图,则返回空字符串。
根据我对Tcl
的理解,此处window
是您的顶级窗口(Tk
或Toplevel
的实例)。
在Windows操作系统上,支持其他标志:
wm iconbitmap window ?-default? ?image?
如果给出了
-default
标志,则该图标将应用于尚未应用其他特定图标的所有顶层窗口(现有和未来)。除了位图图像类型之外,还接受包含有效Windows图标的任何文件的完整路径规范(通常为
.ico
或.icr
文件),或者shell具有的任何文件分配了一个图标。Tcl将首先测试文件是否包含图标,然后是否有分配的图标,最后,如果失败,则测试位图。
到目前为止,还不是非常具体,有用的答案。
当窗口被图标化时,iconbitmap
函数(或方法,取决于编程语言)应该用于将bitmap图像设置到窗口。
在Windows上,您可以为包含valid Windows icon的任何文件设置完整路径规范(通常为.ico
或.icr
个文件),或任何文件shell为其分配了一个图标。
根据我链接的Wikipedia article"位图"到上面:
X Window System 对黑白图像使用类似的
xbm
格式,为彩色图像使用xpm
。 ...
...
所以大多数位图文件格式都是不跨平台!换句话说,如果有人告诉您使用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文件。