Tkinter:检查窗口是否已经打开



这是我非常简单的代码:

def test():
if window.winfo_exists():
pass
else:    
window = Toplevel(root)
root = Tk()
button = Button(root, text="Test", command=test)
button.pack()
root.mainloop()

我基本上只是想检查按钮打开的窗口是否已经打开。如果是这种情况,按钮将不起任何作用。我的代码的问题是;UnboundLocalError:在赋值之前引用了局部变量"window";当我检查窗口时出错。

我已经找了好几个小时才找到合适的解决方案。以下是不起作用的想法:

如果窗口打开,则创建一个单独的布尔值并设置为True

  • 这里的问题是,当我关闭窗口时,我无法将布尔值设置回False。所以我再也无法打开窗户了,当我早些时候关上的时候

有人知道我的问题的合适解决方案吗?提前感谢:(

if window.winfo_exists()中的变量window不存在,因此Python认为window变量已经存在,但函数看不到它。

因为变量不存在,所以您看不到它,所以下一段代码将帮助您。

from tkinter import *
def test():
# trying code for errors/exceptions
try:
global window
if window.winfo_exists():   # python will raise an exception there if variable doesn't exist
pass
else:
window = Toplevel(root)
except NameError:               # exception? we are now here.  
window = Toplevel(root)
else:                           # no exception and no window? creating window.
if window.winfo_exists() == False:
window = Toplevel(root)
root = Tk()
button = Button(root, text="Test", command=test)
button.pack()
root.mainloop()

稍后谢谢!编辑:这现在工作

我只是自己想出来的。我不得不使用协议来获得在我关闭窗口后再次打开窗口的选项。给你:

def test():
def on_closing():
dict_windows["window"] = False
window.destroy()
if dict_windows["window"] == True:
pass
else:
window = Toplevel(root)
window.protocol("WM_DELETE_WINDOW", on_closing)
dict_windows["window"] = True
dict_windows = {
"window" : False
}   
root = Tk()
button = Button(root, text="Test", command=test)
button.pack()
root.mainloop()

我制作了一本字典来存储所有的窗口布尔值(以防将来添加更多的窗口(。

相关内容

最新更新