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 的事件循环相同。
我已经测试 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 的事件循环相同。