Python (Turtle) 在退出应用程序 window 时报告错误

Python (Turtle) reports error when application window is exited

我已经测试 turtle 库大约 3 天了。每当我退出我的应用程序 window 时,我一直遇到的一个重复出现的 'issue' 是回溯错误。终端显示有关 turtle 更新功能的详细信息行,并以:

结尾
_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()

我一直在努力思考回溯报告。我假设它发生是因为应用程序不断更新 window(正如您在 while 运行 块中看到的那样)。所以,有一种可能,一旦我退出 window,应用程序已经在处理 wn.update() 函数,并且它 returns 一个错误,因为它没有完成它的操作。如果是这样的话,那update函数怎么办呢?如果没有,请向我解释问题和解决方案。谢谢!

问题出在你的循环上:

while run:

    wn.update()

这是错误的 Python 乌龟编程方法。我经常在 SO 问题中看到这个循环,所以必须有一本书(“Programming Python Turtle by Bad Example”)或某个地方的教程教人们错误的方法来接近 turtle。

一般来说,我建议您避免使用 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) 的事件循环。这与接收 window 关闭事件并干净地关闭 turtle 的事件循环相同。