在 Python 中多次创建海龟对象
Creating turtle object many times in Python
我正在使用Python Turtle-graphics画一些数字。但是,一旦屏幕关闭,我就无法再次创建它。
例如,以下简单代码有效:
import turtle
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(100, 100)
turtle.done()
但是,在下面的代码中,第二次绘制时出现错误:
import turtle
# FIRST DRAWING:
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(100, 100)
turtle.done()
# SECOND DRAWING:
t = turtle.Turtle() # ERROR OCCURS HERE WHEN FIRST WINDOW IS CLOSED.
t.speed(0)
t.dot()
t.goto(-100, -100)
turtle.done()
错误是:
Traceback (most recent call last):
File "rptTurtle.py", line 12, in <module>
t = turtle.Turtle()
File "/usr/lib/python3.7/turtle.py", line 3816, in __init__
visible=visible)
File "/usr/lib/python3.7/turtle.py", line 2557, in __init__
self._update()
File "/usr/lib/python3.7/turtle.py", line 2660, in _update
self._update_data()
File "/usr/lib/python3.7/turtle.py", line 2646, in _update_data
self.screen._incrementudc()
File "/usr/lib/python3.7/turtle.py", line 1292, in _incrementudc
raise Terminator
turtle.Terminator
问题出在哪里,如何解决?
Standalone Python Turtle 没有设计为一旦退出就重新启动。您可以通过在 tkinter 程序中使用 embedded turtle 来解决这个问题。不过,不退出turtle,而是reset()
屏幕重新画图似乎更简单。
下面的例子放上你的第一张图,如果你在屏幕上点击鼠标按钮,它会重置屏幕并放上你的第二张图:
from turtle import Screen, Turtle
def first_drawing():
turtle = Turtle()
turtle.speed('fastest')
turtle.dot()
turtle.goto(100, 100)
def second_drawing():
turtle = Turtle()
turtle.speed('fastest')
turtle.dot()
turtle.goto(-100, -100)
def switch(x, y):
screen.onclick(None)
screen.reset()
second_drawing()
screen = Screen()
screen.onclick(switch)
first_drawing()
screen.mainloop()
我们可以修改它以使用 list
绘图函数处理任意数量的绘图。
由于您在评论中特别要求执行“第一幅图”和“第二幅图”样式,请在下面找到解决方案:
1)
import importlib
import turtle
# FIRST DRAWING:
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(100, 100)
turtle.done()
importlib.reload(turtle)
# SECOND DRAWING:
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(-100, -100)
turtle.done()
import turtle
# FIRST DRAWING:
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(100, 100)
turtle.done()
# SECOND DRAWING:
turtle.TurtleScreen._RUNNING=True
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(-100, -100)
turtle.done()
我正在使用Python Turtle-graphics画一些数字。但是,一旦屏幕关闭,我就无法再次创建它。
例如,以下简单代码有效:
import turtle
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(100, 100)
turtle.done()
但是,在下面的代码中,第二次绘制时出现错误:
import turtle
# FIRST DRAWING:
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(100, 100)
turtle.done()
# SECOND DRAWING:
t = turtle.Turtle() # ERROR OCCURS HERE WHEN FIRST WINDOW IS CLOSED.
t.speed(0)
t.dot()
t.goto(-100, -100)
turtle.done()
错误是:
Traceback (most recent call last):
File "rptTurtle.py", line 12, in <module>
t = turtle.Turtle()
File "/usr/lib/python3.7/turtle.py", line 3816, in __init__
visible=visible)
File "/usr/lib/python3.7/turtle.py", line 2557, in __init__
self._update()
File "/usr/lib/python3.7/turtle.py", line 2660, in _update
self._update_data()
File "/usr/lib/python3.7/turtle.py", line 2646, in _update_data
self.screen._incrementudc()
File "/usr/lib/python3.7/turtle.py", line 1292, in _incrementudc
raise Terminator
turtle.Terminator
问题出在哪里,如何解决?
Standalone Python Turtle 没有设计为一旦退出就重新启动。您可以通过在 tkinter 程序中使用 embedded turtle 来解决这个问题。不过,不退出turtle,而是reset()
屏幕重新画图似乎更简单。
下面的例子放上你的第一张图,如果你在屏幕上点击鼠标按钮,它会重置屏幕并放上你的第二张图:
from turtle import Screen, Turtle
def first_drawing():
turtle = Turtle()
turtle.speed('fastest')
turtle.dot()
turtle.goto(100, 100)
def second_drawing():
turtle = Turtle()
turtle.speed('fastest')
turtle.dot()
turtle.goto(-100, -100)
def switch(x, y):
screen.onclick(None)
screen.reset()
second_drawing()
screen = Screen()
screen.onclick(switch)
first_drawing()
screen.mainloop()
我们可以修改它以使用 list
绘图函数处理任意数量的绘图。
由于您在评论中特别要求执行“第一幅图”和“第二幅图”样式,请在下面找到解决方案:
1)
import importlib
import turtle
# FIRST DRAWING:
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(100, 100)
turtle.done()
importlib.reload(turtle)
# SECOND DRAWING:
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(-100, -100)
turtle.done()
import turtle
# FIRST DRAWING:
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(100, 100)
turtle.done()
# SECOND DRAWING:
turtle.TurtleScreen._RUNNING=True
t = turtle.Turtle()
t.speed(0)
t.dot()
t.goto(-100, -100)
turtle.done()