学习Python并使用PythonWin编写简单的海龟图形脚本。该脚本将仅从PythonWin执行一次。在随后的尝试中,脚本挂起在创建海龟类实例x=turtle.Turtle()的行上。我需要重新启动PythonWin才能运行脚本。但是,同一个脚本可以在IDLE中多次执行。
使用Python3.7.2(64位)和PythonWin 3.7 (64位)
下面是代码
import turtle
wn = turtle.Screen()
wn.bgcolor("lightgreen")
tess = turtle.Turtle() --->hangs here
dist = 5
tess.up() # this is new
for pas in range(30): # start with size = 5 and grow by 2
tess.stamp() # leave an impression on the canvas
tess.forward(dist) # move tess along
tess.right(24) # and turn her
dist = dist + 2
wn.exitonclick()在调试器中运行脚本并得到以下错误
>>> Unhandled exception while debugging...
Traceback (most recent call last):
File "C:\Users\Drew\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 2557, in __init__
self._update()
File "C:\Users\Drew\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 2660, in _update
self._update_data()
File "C:\Users\Drew\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 2646, in _update_data
self.screen._incrementudc()
File "C:\Users\Drew\AppData\Local\Programs\Python\Python37\lib\turtle.py", line 1292, in _incrementudc
raise Terminator
turtle.Terminator发布于 2019-03-24 01:39:56
有几个建议:完全删除这一行:
wn.exitonclick()或者,如果这不能让事情变得更好,请将其替换为:
wn.mainloop()通常,在运行的Python映像中,turtle是不可重入的。它在重新启动时失败,并显示Terminator。一旦海龟退出,就完了。但一些交互式环境知道这一点,因此它们专门处理mainloop()调用。或者不是。您的环境可能没有设置为处理exitonclick,它是一个mainloop()调用,与调用turtle.bye()的事件处理程序相结合。
发布于 2022-01-01 22:35:35
该模块使用类变量_RUNNING,当在spyder中运行时,该变量在两次执行之间保持不变,而不是将其作为自包含脚本运行。我已经请求更新模块。
同时,使用替代方法/工作示例
1)
import importlib
import turtle
importlib.reload(turtle)
wn = turtle.Screen()
wn.bgcolor("lightgreen")
tess = turtle.Turtle()
dist = 5
tess.up() # this is new
for pas in range(30): # start with size = 5 and grow by 2
tess.stamp() # leave an impression on the canvas
tess.forward(dist) # move tess along
tess.right(24) # and turn her
dist = dist + 2
wn.exitonclick()import importlib
import turtle
importlib.reload(turtle)
wn = turtle.Screen()
turtle.TurtleScreen._RUNNING=True
wn.bgcolor("lightgreen")
tess = turtle.Turtle()
dist = 5
tess.up() # this is new
for pas in range(30): # start with size = 5 and grow by 2
tess.stamp() # leave an impression on the canvas
tess.forward(dist) # move tess along
tess.right(24) # and turn her
dist = dist + 2
wn.exitonclick()https://stackoverflow.com/questions/55309161
复制相似问题