【问题标题】:Python (Turtle) reports error when application window is exitedPython (Turtle) 应用程序窗口退出时报错
【发布时间】:2021-05-26 17:27:52
【问题描述】:

我已经测试了大约 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() 函数,并且它返回一个错误,因为它没有完成它的操作。如果是这种情况,那么我应该如何处理更新功能?如果没有,请向我解释问题和解决方案。谢谢!

【问题讨论】:

    标签: python turtle-graphics traceback python-turtle


    【解决方案1】:

    问题在于你的循环:

    while run:
    
        wn.update()
    

    这是处理 Python 海龟编程的错误方法。我经常在 SO 问题中看到这个循环,所以必须有一本书(“通过不良示例编程 Python 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) 的事件循环。这就是接收窗口关闭事件并干净地关闭乌龟的事件循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多