如何测试顶层窗口是否打开?

Bil*_*ers 2 python tkinter

我觉得有点像Python编程可能不是我的事....

我创建了一个tkinter GUI,它使用一个按钮回调来打开另一个窗口(其他搜索说这个窗口应该是一个顶级窗口)并且它工作得非常好,但是每次按下该按钮时它会打开另一个相同的窗口(如就我所知,窗外.

问题:如何测试窗口(用按钮打开)是否已经存在,从而防止生成重复项???

注意:我不是(还)OOP程序员,所以请尽可能避免使用这种范例......

问候,

比尔W.

A. *_*das 5

我不是(还)一个OOP程序员,所以如果可能请避免使用这个范例......

迟早,如果你想成功地用Python编程,你将不得不理解面向对象的编程.替代方案(全局变量和函数无处不在)并不是一个好方法.甚至Tkinter也有很多带有各自方法的类,所以看起来它对你的目的来说是必要的.

回到你的问题,一个解决方案可能是将Toplevel窗口设置为包装所有应用程序的类的属性,如果此属性为None,则只打开一个新窗口.要在关闭窗口时将此属性设置为"无",可以使用该protocol方法设置回调.

这是一个小工作示例,您可以在其中看到它如何工作:

import Tkinter as tk

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.button = tk.Button(self, text="Open a new window", command=self.openwindow)
        self.button.pack()
        self.toplevel = None
    def openwindow(self):
        if self.toplevel is None:
            self.toplevel = tk.Toplevel(self)
            self.toplevel.protocol('WM_DELETE_WINDOW', self.removewindow)
    def removewindow(self):
        self.toplevel.destroy()
        self.toplevel = None

app = App()
app.mainloop()
Run Code Online (Sandbox Code Playgroud)