Python Turtle.Terminator 即使在使用 exitonclick() 之后

4 python function turtle-graphics python-3.x

我尝试为海龟制作函数,使其非常容易绘制形状。代码如下所示:

import turtle as t

def square():
     tw = t.Screen()
     for i in range(4):
          t.forward(100)
          t.right(90)
     tw.exitonclick()
def triangle():
     tw = t.Screen()
     for i in range(3):
          t.forward(100)
          t.right(120)
     tw.exitonclick()
def star():
     tw = t.Screen()
     for i in range(5):
          t.forward(150)
          t.right(144)
     tw.exitonclick()
Run Code Online (Sandbox Code Playgroud)

当我在 shell 中运行此代码时,会发生终结者错误:

import turtle as t

def square():
     tw = t.Screen()
     for i in range(4):
          t.forward(100)
          t.right(90)
     tw.exitonclick()
def triangle():
     tw = t.Screen()
     for i in range(3):
          t.forward(100)
          t.right(120)
     tw.exitonclick()
def star():
     tw = t.Screen()
     for i in range(5):
          t.forward(150)
          t.right(144)
     tw.exitonclick()
Run Code Online (Sandbox Code Playgroud)

我不明白问题是什么,因为我什至使用了exitonclick().

cdl*_*ane 5

你的海龟程序结构不正确。你不需要做:

tw = t.Screen()
...
tw.exitonclick()
Run Code Online (Sandbox Code Playgroud)

在每个功能中。 Screen()需要调用一次;exitonclick() 应该只被调用一次。尝试一下这种重组:

import turtle as t

def square():
    for i in range(4):
        t.forward(100)
        t.right(90)

def triangle():
    for i in range(3):
        t.forward(100)
        t.right(120)

def star():
    for i in range(5):
        t.forward(150)
        t.right(144)

t.penup()
t.goto(150, 150)
t.pendown()
square()

t.penup()
t.goto(-150, 150)
t.pendown()
triangle()

t.penup()
t.goto(150, -150)
t.pendown()
star()

screen = t.Screen()
screen.exitonclick()
Run Code Online (Sandbox Code Playgroud)

如果您想交互式地执行代码,那也可以。只需删除函数定义后的所有内容,以交互方式将其加载到 Python 中并执行以下操作:

>>> star()
Run Code Online (Sandbox Code Playgroud)

或者任何你想运行的东西。您不需要调用Screen(),并且exitonclick()在交互工作时没有意义。


小智 5

我在做一个学校项目时遇到了同样的错误。经过对海龟库的一些研究,我发现了一个名为 的变量TurtleScreen._RUNNING,如果将此变量设置为True海龟窗口打开,否则会出现错误turtle.Terminator。每次关闭海龟屏幕时,TurtleScreen._RUNNING都会自动设置为True,如果你想避免这种情况,你可以简单地编写这行代码TurtleScreen._RUNNING = True(当然你需要先导入turtle)。