Python делает графику черепахи используя цвета списка - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь делать квадраты с изменением цвета каждый раз, когда нажимаю. но когда я запускаю это, он заполняет только красный цвет. Как я могу изменить цвет каждый раз?

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

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вместо глобальной операции счетчика и модуля я предпочитаю использовать cycle() из itertools, который просто повторяет список:

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()

Также обратите внимание, что я отключил обработчик onscreenclick() внутри реализации обработчика, чтобы пользователь не мог щелкнуть, пока предыдущий квадрат все еще рисуется, так как это приводит к грязным результатам.

0 голосов
/ 28 июня 2018

Вы пропустили звонок на s.mainloop(). И если вы хотите, чтобы n изменялся при каждом щелчке, объявите его как глобальный в функции square() и увеличивайте его после завершения рисования. Не забудьте сбросить n на ноль, если он становится больше len(colors).

Звонок на s.onscreenclick() говорит черепахе «как обрабатывать щелчок» (в данном случае вызывая square()), поэтому вам не нужно помещать в оператор 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

Наконец, обязательно прочитайте это , так как вы впервые в StackOverflow.

...