В Linux с использованием Tkinter и TtkBootstrap вы можете настроить логотип один раз с помощью:
logo = tb.PhotoImage(file = "images/favicon.png")
root.iconphoto(True, logo)
Это гарантирует, что логотип будет отображаться на каждом верхнем уровне и в диалоговых окнах messagebox.showerror/info/warning.
Однако в Windows вам необходимо использовать .iconbitmap('images/favicon.ico')
для каждого верхнего уровня. К сожалению, значок не отображается в диалоговых окнах messagebox.showerror/info/warning, а отображается только логотип Tkinter или логотип Ttkbootstrap.
Есть ли в Tkinter какая-либо функция, с помощью которой вы можете один раз определить логотип в Windows и, что более важно, гарантировать, что логотип появится в диалоговых окнах messagebox.showerror/info/warning?
Я пытался что-то найти, спрашивая
.iconphoto(True, logo)
также должно работать в Windows.
Ниже приведен пример:
import tkinter as tk
from tkinter import messagebox
import ttkbootstrap as tb
def show_dialog():
messagebox.showinfo("Hello", "Hello World")
def show_window():
win = tb.Toplevel()
win.geometry("300x100")
win.title("Secondary Window")
root = tk.Tk()
logo = tb.PhotoImage(file = "lenna.png")
root.iconphoto(True, logo)
tk.Button(root, text = "Window", command=show_window).pack(padx=100, pady=30)
tk.Button(root, text = "Dialog", command=show_dialog).pack(padx=100, pady=30)
root.mainloop()
Результат:
Это сработало, я использовал favicon.ico в функции Photo Image, но кажется, что это работает только с изображениями PNG.
@JosephMoraila Как сказал Дерек в комментарии, вы можете использовать root.iconbitmap(default = "images/favicon.ico")
.
Это не работает, используя tb.Window()
Просто используйте
root.iconbitmap(default = 'images/favicon.ico')
, чтобы распространить значок на всеToplevel
окна.