python tkinter destroy toplevel

时间:2014-04-16 12:52:54

标签: python tkinter

我对tkinter Toplevel小部件有点问题。每当我试图摧毁一个顶层窗口时,它都不会关闭,但它会变为不活动状态。每当我点击应该被销毁的窗口时,我都会收到memoryaddress错误。有人知道我做错了吗?

示例代码:

from tkinter import *
import _thread as thread
import time
root = Tk()
root.title('root')
login = Toplevel(root)
login.title('login')
thread.start_new_thread(root.mainloop,())
time.sleep(3)
login.destroy()

1 个答案:

答案 0 :(得分:1)

Tkinter不是线程安全的。所有Tkinter调用都应该来自一个线程。使用root.after安排函数调用在延迟后发生。

from tkinter import *
root = Tk()
root.title('root')
login = Toplevel(root)
login.title('login')
root.after(3000, login.destroy)
root.mainloop()

根据TkinterSummary

  

所有Tkinter访问必须来自主线程(或者更准确地说,   调用mainloop的线程)。违反这一点可能会导致   令人讨厌和神秘的症状,如冻结或核心转储。