Gráfico de criação das tartarugas em Python usando as cores das listas
Estou a tentar fazer quadrados com mudança de cor sempre que clicar. mas quando dirijo isto, só preenche a cor vermelha. Como posso mudar de cor de cada vez?
import turtle
t= turtle.Turtle()
s=turtle.Screen()
colors = ["red","orange","yellow","green","blue","indigo","purple"]
n=0
def square(x,y):
t.penup()
t.goto(x,y)
t.pendown()
t.color(colors[n])
t.begin_fill()
for i in range(4):
t.fd(90)
t.lt(90)
t.end_fill()
t.penup()
if s.onscreenclick(square) == True:
n+=1
3
2 answers
Estás a perder uma chamada para o
s.mainloop()
. E de você quer que n
Mude com cada clique, declare-o como global dentro da função square()
, e aumente-o depois de terminar o desenho. Não se esqueça de reiniciar n
para zero se ficar maior que len(colors)
.
A chamada para s.onscreenclick()
está dizendo à tartaruga 'como lidar com um clique' (chamando square()
neste caso), então você não precisa colocar em uma declaração if
.
import turtle
t= turtle.Turtle()
s=turtle.Screen()
colors = ["red","orange","yellow","green","blue","indigo","purple"]
n=0
def square(x,y): # draw a square at (x,y)
global n # use the global variable n
t.penup()
t.goto(x,y)
t.pendown()
t.color(colors[n])
t.begin_fill()
for i in range(4):
t.fd(90)
t.lt(90)
t.end_fill()
t.penup()
n = (n+1) % len(colors) # change the colour after each square
s.onscreenclick(square) # whenever there's a click, call square()
s.mainloop() # start looping
Finalmente, não te esqueças de ler isto, pois é a tua primeira vez. no StackOverflow.
0
Author: Richard Inglis, 2018-06-28 08:20:22
Em vez de um contador global e operação de Módulo, prefiro usar cycle()
de itertools que simplesmente continua a repetir a lista:
from turtle import Turtle, Screen
from itertools import cycle
colors = cycle(["red", "orange", "yellow", "green", "blue", "indigo", "purple"])
def square(x, y):
screen.onscreenclick(None) # disable handler inside handler
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
turtle.color(next(colors))
turtle.begin_fill()
for _ in range(4):
turtle.forward(75)
turtle.left(90)
turtle.end_fill()
turtle.penup()
screen.onscreenclick(square)
screen = Screen()
turtle = Turtle()
screen.onscreenclick(square)
screen.mainloop()
Note também que desactivei o onscreenclick()
manipulador dentro da implementação do manipulador para que o utilizador não possa carregar enquanto o quadrado anterior ainda está a ser desenhado, dado que isso leva a resultados confusos.
0
Author: cdlane, 2018-06-28 18:51:44