Как изменить цвет фигур в Черепахе через списки

Мне было интересно, есть ли способ составить список цветов, например shape_color = ['red', 'blue', 'green'], и назначить этот список одной клавише клавиатуры onkey(), чтобы всякий раз, когда я нажимаю эту клавишу, она циклически перемещалась по списку цветов, меняя цвет черепахи. ? Моя программа представляет собой графику черепахи Python, где вы перемещаете курсор, отпечатывая различные фигуры на экране.


person Hayden    schedule 29.08.2012    source источник
comment
Я надеюсь, что мой вопрос достаточно ясен.   -  person Hayden    schedule 29.08.2012
comment
Ваш вопрос очень ясен, и вы могли бы это сделать. Что вы пробовали?   -  person David Cain    schedule 29.08.2012
comment
Я попытался установить переменную, равную 0, и попробовал +1, но пока мне не повезло.   -  person Hayden    schedule 29.08.2012
comment
Покажи нам свой код! Просто добавьте его к своему вопросу, и мы поможем вам с решением.   -  person David Cain    schedule 29.08.2012
comment
Ваш код действительно немного запутан, но я не вижу кода, относящегося к вашей проблеме. Публикуя свой код, постарайтесь предоставить нам как можно меньше кода, чтобы понять проблему (см.: sscce). Не могли бы вы отредактировать свой пост, чтобы включить только раздел, относящийся к переключению цвета? (Нам не нужно видеть все фигуры).   -  person David Cain    schedule 29.08.2012
comment
Я пробовал много вещей и не знаю, что делать с проблемой. Я случайно удалился из него, поэтому вот код.   -  person Hayden    schedule 29.08.2012
comment
рекомендуется: Семь способов использования Turtle   -  person jfs    schedule 29.08.2012
comment
Извините, я просто не знаю, что я ищу в этом PDF-файле.   -  person Hayden    schedule 29.08.2012
comment
Мне все еще нужна помощь в этой задаче. Есть ли способ увеличивать список всякий раз, когда я нажимаю клавишу?   -  person Hayden    schedule 30.08.2012
comment
Есть ответ, ожидающий вас, чтобы попробовать. Пожалуйста, дайте нам знать, если это поможет достичь вашей цели.   -  person Aesthete    schedule 05.09.2012


Ответы (2)


shape_color = ['red', 'blue', 'green'] # list of colors
idx = 0 # index for color list

# Callback for changing color
def changecolor():
    idx = (idx+1) % len(shape_color) # Increment the index within the list bounds
    fillcolor(shape_color[idx]) # Change the fill color

# Register the callback with a keypress.
screen.onkey(changecolor, "c")

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

person Aesthete    schedule 05.09.2012
comment
это вызовет UnboundLocalError. Вы можете использовать: changecolor = lambda colors=itertools.cycle(shape_color): fillcolor(next(colors)) - person jfs; 07.09.2012
comment
Отличный ответ, если вы подадите, я удалю свой. - person Aesthete; 08.09.2012

Полная версия исправления @jfs примера @Aesthete:

from turtle import Screen, Turtle
from itertools import cycle

shape_colors = ['red', 'blue', 'green', 'cyan', 'magenta', 'yellow', 'black']

def change_color(colors=cycle(shape_colors)):
    turtle.color(next(colors))

turtle = Turtle('turtle')
turtle.shapesize(5)  # large turtle for demonstration purposes

screen = Screen()
screen.onkey(change_color, 'c')
screen.listen()
screen.mainloop()
person cdlane    schedule 09.06.2019