python tkinter销毁顶层窗口

1 投票
1 回答
2528 浏览
提问于 2025-04-18 02:58

我在使用tkinter的Toplevel窗口时遇到了一点问题。每当我尝试关闭一个toplevel窗口时,它并不会真正关闭,而是变得无响应。每次我点击那个应该已经关闭的窗口时,就会出现一个内存地址错误。有没有人知道我哪里出错了?

示例代码:

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 个回答

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 的那个线程)。如果不遵守这个规则,可能会导致一些奇怪的问题,比如程序卡住或者崩溃。

撰写回答