gpt4 book ai didi

python - 为什么我有两个 tkinter 窗口?

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:40 24 4
gpt4 key购买 nike

下面是代码。

from tkinter import *
def schedule_log():
root = Toplevel()
root.title("My Schedule")
canvas = Canvas(root, width=675, height=260)
root.schedule = schedule = PhotoImage(file="my_image.gif")
canvas.create_image(0, 0, anchor=NW, image=schedule)
canvas.pack()

schedule_log()

当我运行它时,我有两个窗口。一个是标题为 tk 的 tkinter 窗口,另一个是标题为“我的日程安排”的窗口。谁能向我解释这是为什么?非常感谢您的时间和关注。此外, root.schedule 的功能是什么?我的意思是,如果我理解正确的话,root 是 Toplevel 类的一个实例。那么,我们是否要尝试为该特定实例设置一个属性?那么,这是否意味着我们可以在类之外设置属性?

最佳答案

第一个窗口由 Tk() 创建(如果您忘记了,这显然会自动完成); 其他 窗口由Toplevel() 创建。是的,这看起来很愚蠢——我不知道为什么要这样做。如果你想要多个窗口,所有窗口都处理相同,我看到的一种方法是立即在初始 Tk() 窗口上调用 .withdraw() 以使其不可见,然后忘记它完全 - 您所有的实际窗口都是由 Toplevel() 创建的。

一般来说,您可以在类实例中自由存储任意属性,只要它们不与类的任何实际属性冲突即可。另外一般来说,这是一个坏主意,因为您不一定要知道该类的所有实际属性是什么。然而,您在这里看到的是一种惯用的 Tkinter 用法,垃圾收集与 Tk 图像交互的奇怪方式使它成为必需。如果将图像存储在局部变量中,它几乎会立即消失。如果将它存储在一个全局变量中,它将永远存在,即使在使用该图像的窗口关闭后也是如此。将图像存储为显示它的小部件或窗口的属性,从而赋予它正确的生命周期。

关于python - 为什么我有两个 tkinter 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41153220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com