多次执行 turtle 海龟图报错:turtle.Terminator

· 2022-03-28
点点滴滴 程序设计 Python

解决了 海龟画图窗口在最上 的问题之后,同学的儿子又发来新问题。
他使用海龟模块绘制冰墩墩图案,准备多次绘制,结果每次第二次绘制都会报错,导致程序终止。

调试环境: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()

第一遍执行完,关闭绘图窗口,当选择“再来一次”的时候就会出错:
2022-03-28_22-56-02.png

原因大概是 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()

亲测有效,见下图的多次运行效果:
turtle.gif

  • 本文作者:恩爸
  • 本文链接:http://www.sirit.com.cn/archives/426/
  • 版权许可:知识共享署名-相同方式共享4.0国际许可协议
  • 友情提示:本文更新于2022年08月22日,已超过210天没有更新,若内容或图片失效,请留言反馈。
  • 如何让 PyCharm 的 turtle 窗口总在最前
  • 二人对战抽象策略类《昆虫棋 Hive》
取消回复

说点什么?
Title
调试环境:PyCharm 社区版 2021.3.3

本站已经运行0天 © 2005- 大嘴狗狗. - Typecho & Moricolor - 粤ICP备18101800号 - 粤公网安备44030402005553号