更改Tkinter消息框的图标

8
有没有办法改变tkinter消息框的图标?这是我的代码:
from tkinter import *
import tkinter.messagebox as messagebox

root = Tk()
messagebox.showinfo(title='Example',message='This is an example')
root.mainloop()

有没有选项可以将默认的tkinter图标更改为自定义ico图标?

2个回答

17

以下是你问题的两个可能解决方案:

1. 改变标题栏图标

是的,在tkinter中我们可以为标题栏设置自定义图标。

为标题栏设置自定义图标

代码:

import tkinter as tk
window = tk.Tk()

# change title bar icon
window.iconbitmap('book_2.ico')

window.mainloop()

注意:使用.ico文件与iconbitmap()函数一起使用。

如果您为根窗口设置自定义图标,则相同的图标将被设置为所有其他子窗口(包括来自messagebox模块的消息框)的标题栏图标。

根窗口和消息框有相同的自定义图标

代码:

import tkinter as tk
import tkinter.messagebox as tkmb

window = tk.Tk()

# change title bar icon
window.iconbitmap('book_2.ico')

# same icon is also set for the message box
tkmb.showinfo(title='Info', message='Info message box')

window.mainloop()

2. 更改消息框内的图标

不可以设置自定义图标来显示在消息框内。

Message box icon

但是您有四个预设的图标选项可供选择,它们是:

  • 错误
  • 信息
  • 问题
  • 警告

4 message box icon options

您可以通过将上述4个值之一指定为icon选项来使用它们。

import tkinter.messagebox as tkmb

tkmb.showinfo(title='Message Box', message='Error message', icon='error')
tkmb.showinfo(title='Message Box', message='Info message', icon='info')
tkmb.showinfo(title='Message Box', message='Question message', icon='question')
tkmb.showinfo(title='Message Box', message='Warning message', icon='warning')

注意: 默认图标为

  • showinfo() 消息框的图标为 信息
  • showerror() 消息框的图标为 错误
  • showwarning() 消息框的图标为 警告

1
即使我使用“iconbitmap()”,标题图标也不会更改。如果有人知道其他可能的原因,请告诉我。我还将在下面的答案中发布我的图像及代码。 - Priya
那么没有办法直接移除它吗? - BurnDownTheWorld
有没有办法在 askyesno 对话框中去掉图标?当我输入 None 时,它默认为 info :/ - oldboy
有没有办法在创建根窗口之前完成这个操作? - CodeWizard777
还可以使用iconphoto方法来使用PhotoImage对象,而不是路径到位图图标文件,其格式取决于平台(即Windows的ICO,Unix类系统的XBM)。 - Tigran

6

是的,有这样一个选项。假设您的根Tkinter实例被称为root,您的导入语句是from tkinter import *,并且您的图像文件名为'ico.gif'

root.tk.call('wm', 'iconphoto', root._w, PhotoImage(file='ico.gif'))

在弹出messagebox之前以及创建root对象后调用此方法。该图标将适用于根对象以及messagebox

1
首先,你在说哪个图标?如果是 messagebox 中的那种火箭图标,那么没有任何变化。如果你在谈论根图标,那我不知道,因为在这个 OS X 上,没有显示任何图标。 - nbro
1
“羽毛”是Python 3 tkinter 应用程序标题栏中显示的图像,如此处所示:http://cnx.org/resources/f423ff5afe099b03fc3f24e63e0bc81607a3b60a/1359-1610-01.jpg。上述代码适用于Windows,但我没有OSX机器进行测试。 - TigerhawkT3
@nbro - 在OSX应用程序中似乎根本没有那种窗口图标,所以我不奇怪它对你不起作用。但是,它应该适用于OP。 :) - TigerhawkT3
2
@TigerhawkT3:在 macOS 上可以通过更改根窗口的 iconphoto(True, tk.PhotoImage(file='img.png')) 来实现。 - Saad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接