如果tk.Toplevel位于其他文件中,如何关闭窗口

时间:2018-11-16 18:36:50

标签: python tkinter

如果我所使用的方法看不到tk.Toplevel(root),如何关闭当前窗口?

这是我的意思的一个小例子:

file1.py:

import Tkinter as tk
import file2
class ExampleMain:
    def __init__(self, root):
        self.mainFrame = tk.Frame(root)
        ...
        tk.Button(self.mainFrame, command=self.button_pressed)
        ...

    def button_pressed(self):
        self.whatever = tk.Toplevel(root)
        self.app = file2.ExampleNotMain(self.whatever)

if __name__ == '__main__':
    root = tk.Tk()
    app = ExampleMain(root)
    root.mainloop()

file2.py:

import tkinter as tk
class ExampleNotMain:
    def __init__(self, root):
        self.frame = tk.Frame(root)
        ...
        tk.Button(self.frame, command=self.close_window)
        ...

    def close_window(self):
        =>  missing_command_here

在此示例中,我想关闭创建的第二个窗口(并保留第一个窗口)。

如果所有代码都在一个文件中,例如

self.whatever.destroy()

会这样做。我的问题是我看不到第一个文件中的对象,而命令在第二个文件中。

我发现了类似的东西

execfile("file2.py") 

但我不喜欢这种解决方案。

有没有更好的方法来解决我的问题?

我真的很感谢您的帮助。 预先感谢。

1 个答案:

答案 0 :(得分:0)

创建ExampleNotMain时,无论传递第二个顶级self.。在ExampleNotMain.__init__中,它绑定到root。 (masterparent是更好的参数名称)。在__init__中,添加self.top = root (or whatever you call the passed-in toplevel). In close_window , add self.top.destroy()`。