Python (Turtle) 应用程序窗口退出时报错

时间:2021-05-26 17:27:52

标签: python turtle-graphics traceback python-turtle

我已经测试了海龟库大约 3 天了。我遇到的一个反复出现的“问题”是每当我退出应用程序窗口时出现回溯错误。终端显示有关海龟更新功能的详细信息行,并以:

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

这是我的代码:

import turtle
wn = turtle.Screen()
wn.title("Game Window")
wn.bgcolor("black")
wn.setup(width=1000, height=650)
wn.tracer(0)

run = True

while run:

    wn.update()

我一直在努力思考回溯报告。我假设它发生是因为应用程序不断更新窗口(如您在 while run 块中所见)。因此,一旦我退出窗口,应用程序可能已经在处理 wn.update() 函数,并且它返回一个错误,因为它没有完成它的操作。如果是这样,那么我应该如何处理更新功能?如果没有,请向我解释问题和解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

问题在于你的循环:

while run:

    wn.update()

这是进行 Python 海龟编程的错误方法。我经常在 SO 问题中看到这个循环,所以一定有一本书(“通过坏例子编程 Python 海龟”)或教程教人们错误的方法来处理海龟。

通常,我建议您避免使用 tracer()update(),直到您的程序基本正常运行并且您现在需要优化其性能。如果您确实使用了 tracer(),那么您应该只在完成更改并希望用户看到当前显示时才调用 update()。类似的东西:

from turtle import Screen, Turtle

screen = Screen()
screen.setup(width=1000, height=650)
screen.title("Game Window")
screen.tracer(0)

turtle = Turtle()

radius = 1

while radius < 300:
    turtle.circle(radius, extent=1)

    radius += 0.25

screen.update()  # force above to be seen
screen.mainloop()

需要注意的一个关键点是我们的程序以 mainloop() 调用结束,该调用将控制权传递给 Tk(inter) 的事件循环。这与接收窗口关闭事件并干净地关闭海龟的事件循环相同。

相关问题