【学习日常随记】tkinter设置窗口图标的三种方式

在这里插入图片描述


tkinter是Python中进行GUI设计的最常用库之一,默认生成的tkinter窗口图标就是一根 [羽毛] 的样子。
在这里插入图片描述
那么如果我们希望窗口图标是我们自定义想要的样子,那该如何去操作呢?

关于如何自定义更改窗口左上角的图标,可是费了我九牛二虎之力,查阅了无数资料,最后终于搞明白了。

(嗯,实际上是查阅了很多资料,终于找到一篇较为完整阐述tkinter中设置窗口图标的文章)
在这里插入图片描述
那下面再自我总结一下。

在tkinter中我们可以通过三种手段来设置窗口图标:

  1. iconbitmap 设置窗口图标
  2. tk.call 设置窗口图标
  3. iconphoto 设置窗口图标

我们来一一说道说道,发车!
在这里插入图片描述
——

一、iconbitmap 设置窗口图标

iconbitmap() 将窗口图标设置为 bitmap。

它的参数必须传入一个ico类型位图,不能为 png 或 jpg 等其他类型,否则图像就会显示失败。

import tkinter as tk

window = tk.Tk()
window.title('Nilvya办公系统')  # 更改标题名字
window.geometry('327x272')  
window.iconbitmap('panda.ico')   # 更改窗口图标
window.mainloop()

运行程序(注意看左上角图标变化)
在这里插入图片描述
但是如果我们使用了 png 类型图片,则窗口中图标位置将会显示不出来。
在这里插入图片描述
小Tip:如果需要下载ico类型的图标,可以在这个网站找找:easyicon,里面有超多而且各种类型的图标。(不好的地方就是很多下载都需要VIP会员)
在这里插入图片描述
在这里插入图片描述

二、iconphoto 设置窗口图标

通过调用iconphoto()方法,我们可以实现将png格式的图像设置为窗口图标。

import tkinter as tk

window = tk.Tk()
window.title('Nilvya办公系统')  # 更改标题名字
window.geometry('327x272')  
window.iconphoto(False, tk.PhotoImage(file='头像.png'))
window.mainloop()

在这里,第一参数False 表示该图标图像仅适用于该特定窗口,而不适用于将来创建的 toplevels 窗口;如果设置为True ,则图标图像也将应用于以后创建的所有 toplevels 图像。

运行程序(看到窗口右上角我的头像木,嘿嘿~)
在这里插入图片描述
但经过本人亲测,如果是jpg格式的文件,则会出现报错 tkinter.TclError
在这里插入图片描述
木事,大不了委婉地将jpg转换为png就好。
在这里插入图片描述

三、tk.call 设置窗口图标

tk.call() 方法是 tkinter 到 tcl 解释器的接口,我们可以用 call 方法运行 tcl 命令。

我们需要将图像设置为 tk.PhotoImage 而不是图像本身,否则会出现 tkinter.TclError 错误。

(嗯,反正我这渣渣也不太明白原理,但会用就好!)

核心就是前面参数不变,将最后的file= 后面的字符串更改为自己想要替换的png类型图片就好。

import tkinter as tk

window = tk.Tk()
window.title('Nilvya办公系统')  # 更改标题名字
window.geometry('327x272')  
window.tk.call('wm', 'iconphoto', window._w, tk.PhotoImage(file='头像.png'))  # 更改窗口图标
window.mainloop()

同样经过本人亲测,如果是jpg格式的文件,也会出现报错(55555~~)
在这里插入图片描述
在这里插入图片描述

四、复盘总结

tkinter设置窗口图标的三种方式

  1. iconbitmap() 只能是ico类型
  2. iconphoto() 支持png,不支持jpg(其他没测试)
  3. tk.call() 支持png,不支持jpg(其他没测试)

虽然有些类型不支持,不过没关系,我们可以利用图片格式转换工具将图标图像统统转换为ico类型或者png类型就可以了。

在这里插入图片描述
在这里插入图片描述

发布了36 篇原创文章 · 获赞 41 · 访问量 3866

猜你喜欢

转载自blog.csdn.net/nilvya/article/details/104822196