多次执行 turtle 海龟图报错:turtle.Terminator
解决了 海龟画图窗口在最上 的问题之后,同学的儿子又发来新问题。
他使用海龟模块绘制冰墩墩图案,准备多次绘制,结果每次第二次绘制都会报错,导致程序终止。
调试环境:PyCharm 社区版 2021.3.3
示例代码:
flag = "Y"
while(flag =="Y"):
import turtle
turtle.Screen().getcanvas().winfo_toplevel().attributes("-topmost", True)
colors = ['red', 'purple', 'blue', 'green', 'yellow', 'orange']
t = turtle.Pen()
t.shape("turtle")
turtle.bgcolor('black')
for x in range(72):
t.pencolor(colors[x % 6])
t.width(x / 20 + 1)
t.forward(x)
t.left(30)
turtle.done()
flag = input("再来一次? (Y/N)").upper()
第一遍执行完,关闭绘图窗口,当选择“再来一次”的时候就会出错:
原因大概是 turtle.done() 只是暂停了程序的执行,使绘图窗口停留不关闭,当关闭绘图窗口后,turtle还在后台继续运行,因此下一次再执行 turtle 的代码就会出错。
具体的解决办法见下面增加的两行代码:
flag = "Y"
while(flag =="Y"):
import turtle
turtle.Screen().getcanvas().winfo_toplevel().attributes("-topmost", True)
colors = ['red', 'purple', 'blue', 'green', 'yellow', 'orange']
t = turtle.Pen()
t.shape("turtle")
turtle.bgcolor('black')
for x in range(72):
t.pencolor(colors[x % 6])
t.width(x / 20 + 1)
t.forward(x)
t.left(30)
turtle.done()
turtle.Turtle._screen = None # force recreation of singleton Screen object
turtle.TurtleScreen._RUNNING = True # only set upon TurtleScreen() definition
flag = input("再来一次? (Y/N)").upper()
亲测有效,见下图的多次运行效果: