如何在tkinter中销毁后检查是否存在顶层?

时间:2017-06-14 21:23:29

标签: python-3.x tkinter

我正在尝试检查特定的Toplevel是否已被销毁,这是在按下某个按钮后发生的,这样我就可以在程序中执行其他操作(即创建一个新的Toplevel)。

据说,在用户关闭初始顶层之后,shell上的输出应为“N”。这表明该程序理解初始顶级不再存在,允许我进入该特定if not t1.winfo_exists():子句的下一阶段(见下文)。

此输出不会发生。输出中没有任何事情发生。我使用'winfo_exists()'而我找不到我做错了什么。

from tkinter import *

root = Tk()

t1 = Toplevel(root)
t1.title('REG') 

def GetREG():
    global e, reg
    reg = e.get() # find out the user input
    # Destroy the toplevel:
    t1.destroy() # after the user presses the SubmitButton

label = Label(t1, text="Enter your REG:")
label.pack()

e = Entry(t1) # for the user to input their REG
e.pack()

SubmitButton = Button(t1,text='Submit',command=GetREG) # button to submit entry
SubmitButton.pack(side='bottom')

if not t1.winfo_exists(): # TRYING TO CHECK when the does not exist
    # supposedly, this should occur after the SubmitButton is pressed
    # which shold allow me to then carry out the next step in the program
    print("No")

root.mainloop()

当用户销毁窗口时,是否会将其识别为不存在的状态?当我用交叉删除't1 toplevel时,或者当它通过SubmitButton(t1.destroy()中的GetREG())删除时,它不起作用。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

当您检查 pastebin.com/iKsjQ9wX 时,窗口仍然存在,因为您在创建该函数大约一毫秒后调用该函数。 tkinter如何知道您希望t1.winfo_exists()语句等待窗口被销毁?

如果你想在执行更多代码之前等待它被销毁,你可以使用方法if,就像wait_window一样,它处理事件直到窗口被销毁。

mainloop