首页 > 解决方案 > Tkinter,窗口没有关闭

问题描述

我正在创建一个运行良好的游戏,但是当我关闭窗口时它给出了这个错误:

_tkinter.TclError: can't invoke "update" command: application has been destroyed error

为了解决这个问题,我在 while 循环之前添加了这段代码,这是我从这里提出的另一个问题中得到的。

x = True
def update_x():
    global x
    x = False

tk.protocol("WM_DELETE_WINDOW", update_x)

while循环是:

while x == True:
    draw()
    time.sleep(0.1)
    tk.update()

窗户现在根本关不上。我究竟做错了什么?我真的不知道如何使用 mainloop 方法,有没有办法使用上面的 while 循环使其工作?

标签: python-3.xtkinter

解决方案


首先,我很确定当您覆盖“WM_DELETE_WINDOW”时,您应该tk.destroy()在函数结束时调用(update_x),否则窗口不会被破坏。其次,如果“x”总是一个布尔值,最好说:while x: do_smth()而不是while x == Truewhile not x而不是while x == False。如果您在这些更改后仍然有问题,您可以做两件事:首先,您可以检查窗口是否存在,然后像这样更新它:if tk.winfo_exists(): tk.update()或者可能在您的新协议函数(update_x)的末尾,而不是tk.destroy()您可以编写tk.quit()安全退出程序。


推荐阅读