获取第二个窗口tkinter使用的根窗口图标

时间:2020-10-07 23:19:51

标签: python tkinter tk

我想知道是否仍然可以在不知道图标位置的情况下获取一个窗口的ico文件并在同一窗口中使用它。

from tkinter import *

root = Tk()
root.iconbitmap('img/icn.ico')
top = Toplevel()

root.mainloop()

在这里,我希望top具有root的图标,而无需说top.iconbitmap()top.iconphoto(),最接近的ive是top.tk.call('wm','iconbitmap'),但我不知道这是什么之所以要这样做,是因为我找不到可理解的文档。

为什么我不想使用iconbitmap(),从根本上来说,您可以使用tkinter.messagebox看到消息框自动从父窗口小部件继承图标。我正在尝试复制这种效果。如果该图标是默认的tk图标,则显示空白图标,否则显示自定义图标。

先谢谢您了:D

2 个答案:

答案 0 :(得分:1)

[[我在这里使用指向Tk核心文档的链接。在大多数情况下,它比Tkinter文档更准确,并且Tkinter大多是一个明显的薄包装。]

您不希望wm iconbitmap。几十年来,这种方法实际上已经过时了。它使用的对象类bitmap如今已不相关,因为它是单色的并且使用最奇怪的格式。 (文件名必须在@之前,以使其起作用。)

相反,您想操纵相关顶级窗口的wm iconphoto。这些可以拍摄真实的照片图像(您可以加载许多图像文件格式),并且可以轻松共享它们。

# Load the image from the file; can also use PNG and other formats
my_image = PhotoImage(file="image.gif")

# Apply the image as the icons
first_toplevel_window.iconphoto(False, my_image)
second_toplevel_window.iconphoto(False, my_image)

请注意,图标的显示方式可能千差万别;它不受您的控制。

答案 1 :(得分:0)

您可以使用sudo apt update && sudo apt-get update并将第一个参数设置为iconphoto(),然后相同的图标也将用于将来创建的顶层:

True