Как правило, вы не должны планировать выживать при win.exitonclick()
или любой другой команде черепахи, которые передают управление в цикл событий tkinter.Для этого есть свои приемы, но не стоит беспокоиться, когда проще просто избежать этой ситуации.То, что вы хотите, это win.clear()
или, возможно, win.reset()
.Я включил это ниже и переписал вашу логику подсказок, чтобы использовать ее собственное событие щелчка вместо exitonclick()
и использовать графику numinput()
:
from turtle import Screen, Turtle
def drawLS(turtle, instructions):
for cmd in instructions:
if cmd == 'F':
turtle.forward(5)
elif cmd == '+':
turtle.right(70)
elif cmd == '-':
turtle.left(70)
else:
print('Error : %s is an unknown command '%cmd)
def applyProduction(n):
axiom = 'F'
myRules = {'F': 'F-F++F-F'}
for _ in range(n):
newString = ""
for ch in axiom:
newString += myRules.get(ch, ch)
axiom = newString
return axiom
def lsystem(n):
aTurtle.up()
aTurtle.setposition(-200, 0)
aTurtle.down()
aTurtle.setheading(0)
newRules = applyProduction(n)
drawLS(aTurtle, newRules)
def prompt(x=None, y=None): # dummy arguments for onclick(), ignore them
screen.onclick(None)
n = screen.numinput("Complexity Factor", "Enter an integer greater than 0", minval=1, maxval=100)
if n is not None:
screen.clear()
lsystem(int(n))
screen.onclick(prompt)
screen = Screen()
aTurtle = Turtle()
aTurtle.speed('fastest') # because I have no patience
prompt()
screen.mainloop()
Когда рисунок закончится, нажмите наэкран, чтобы получить новое приглашение для другого фактора сложности и новый чертеж.