Python Turtle窗口每第二次运行都会崩溃。

3
下面的代码是使用Python中的Turtle绘制基本正方形。
第一次运行代码可以工作。但是再次运行代码会激活一个无响应的Turtle窗口,并随后每次崩溃。
错误消息包括raise TerminatorTerminator 在Spyder(Dell桌面上的Python 3.6)中重新启动内核可以解决问题,因此我可以成功地再次运行代码,但根本原因仍然是个谜? 链接到另一个类似但尚未回答的问题。
如果您认为这个问题值得回答,请+1!
import turtle
bob = turtle.Turtle()
print(bob)
for i in range(4):
    bob.fd(100)
    bob.lt(90)

turtle.mainloop()

也许有点冒险,但你尝试过在这个答案中提到的 turtle.bye() 建议了吗?请注意,turtle.done()turtle.mainloop() 的同义词,因此这是一种罕见的情况,您需要在 turtle.mainloop() 调用之后放置代码 turtle.bye() - cdlane
cdlane - 它起作用了!请发布为答案 - 我一定会将正确答案打勾。 - Daniel Moisio
Daniel,如果你能够在链接中给出的答案上投一票,那将是足够并且受人赞赏的。这将有助于确认这是一个普遍的解决方案,也许这个问题将被合并成为那个问题的重复。 - cdlane
这段代码对我来说运行良好。这是Spyder特定的问题吗? - ggorlen
2个回答

2

我知道这似乎无法令人满意,但是我发现使用以下方法创建海龟:

try:
    tess = turtle.Turtle()
except:
    tess = turtle.Turtle()  

优化代码以确保稳定运行,即消除“每隔一段时间就出现问题”的部分。我还会从以下几个方面入手:

wn = turtle.Screen()

并以

结尾。

from sys import platform
if platform=='win32':
    wn.exitonclick()

如果没有这些部分,当我尝试在Windows中移动海龟绘图窗口时,会出现问题。(在Windows机器上运行Python 3.6的Spyder)

编辑:当然,在OSX上不使用exitonclick()命令是完全可以的,而且使用它会导致不稳定,因此添加了特定于平台的版本以解决这个问题。try...except部分在OSX上仍然需要。


0
该模块使用一个类变量_RUNNING,当在Spyder中运行而不是作为独立脚本运行时,在执行之间保持为真。我已经请求更新该模块。
同时,可以尝试DukeEgr93提出的解决方法以外的工作示例。
1)
import importlib
import turtle

importlib.reload(turtle)

bob = turtle.Turtle()
print(bob)
for i in range(4):
    bob.fd(100)
    bob.lt(90)

turtle.mainloop()


import importlib
import turtle

turtle.TurtleScreen._RUNNING=True
bob = turtle.Turtle()
print(bob)
for i in range(4):
    bob.fd(100)
    bob.lt(90)

turtle.mainloop()



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接