【问题标题】:Get icon of root window to be used by second window tkinter获取第二个窗口 tkinter 使用的根窗口的图标
【发布时间】:2021-01-22 23:23:44
【问题描述】:

我想知道是否有办法获取一个窗口的 ico 文件并在同一个窗口中使用它,而不知道图标的位置。

from tkinter import *

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

root.mainloop()

在这里我希望toproot 的图标而不说top.iconbitmap()top.iconphoto(),我得到的最接近的是top.tk.call('wm','iconbitmap') 但我不知道该怎么做,因为我找不到易于理解的文档。

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

提前致谢:D

【问题讨论】:

  • 尝试将True 传递给iconphoto() 的第一个参数。

标签: python tkinter tk


【解决方案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)

请注意,图标的显示方式可能千差万别;它不在你的控制之下。

【讨论】:

  • 但是我无法控制用户选择什么,比如如果用户选择bitmap,但我想要的是没有任何附加选项或任何设置自动messagebox 使用图标父窗口,怎么可能?
  • 别费心给他们选择。或者如果他们坚持这样做,让他们自己承担后果。
  • 这是我想要添加的功能,而不是他们的选项。这就是问这个问题的原因。
【解决方案2】:

您可以使用iconphoto() 并将第一个参数设置为True,那么以后创建的顶层也将使用相同的图标:

import tkinter as tk

root = tk.Tk()

icn = tk.PhotoImage(file='my-icon.png')
root.iconphoto(True, icn)

top = tk.Toplevel(root)

root.mainloop()

【讨论】:

  • 这就像我在制作一个模块,所以我无法控制用户如何设置他们的图标,如果它是 iconbitmap 怎么办?我正在寻找的是类似messagebox 的效果,在不传递任何参数或任何额外内容的情况下,它们会自动获取父窗口的图标
【解决方案3】:

如果您使用default 而不是bitmap(或第一个)参数,则该图标将自动用于所有TopLevel 窗口:

root.iconbitmap('img/icn.ico')         # icon set only on root
root.iconbitmap(bitmap='img/icn.ico')  # same as above
root.iconbitmap(default='img/icn.ico') # icon set on root and all TopLevels

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 1970-01-01
    • 2013-10-21
    • 2021-11-29
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    相关资源
    最近更新 更多