【问题标题】:Why does this simple Tkinter code create two top-level windows?为什么这个简单的 Tkinter 代码会创建两个顶级窗口?
【发布时间】:2023-01-22 23:06:46
【问题描述】:

考虑这个非常简单的代码 sn-p:

import tkinter as tk

class GUI:
    def __init__(self):
        self.top_level_window = tk.Tk()
        

GUI()
GUI().top_level_window.mainloop()

它在我的屏幕上创建了两个顶级窗口。为什么?

我以为第一个实例会立即被垃圾收集,这样我只会得到一个窗口。 我也尝试过稍微修改过的版本,我确信它会创建两个单独的对象,因此只有一个窗口:

a=GUI()
b=GUI()
b.top_level_window.mainloop()

但是我错了。我想不出一个理由。

有什么帮助吗?

【问题讨论】:

    标签: python class tkinter instance


    【解决方案1】:

    因为你给班级打了两次电话。

    GUI()
    GUI().top_level_window.mainloop()
    >>>
    GUI().top_level_window.mainloop()
    

    【讨论】:

    • 这没有解决 OP 关于垃圾收集的想法,也没有解释第二个代码 sn-p 的行为。
    【解决方案2】:

    我认为使用 tkinter,框架本身会保留您创建的 GUI 对象的实例。这会破坏您可能认为会发生的任何垃圾回收。

    您需要在任何您希望 tkinter 忘记的元素上调用 .destroy()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-20
      • 2015-02-19
      • 2012-07-13
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多