Мне было интересно, есть ли способ составить список цветов, например shape_color = ['red', 'blue', 'green']
, и назначить этот список одной клавише клавиатуры onkey()
, чтобы всякий раз, когда я нажимаю эту клавишу, она циклически перемещалась по списку цветов, меняя цвет черепахи. ? Моя программа представляет собой графику черепахи Python, где вы перемещаете курсор, отпечатывая различные фигуры на экране.
Как изменить цвет фигур в Черепахе через списки
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
это вызовет UnboundLocalError. Вы можете использовать:
changecolor = lambda colors=itertools.cycle(shape_color): fillcolor(next(colors))
- person jfs; 07.09.2012
Отличный ответ, если вы подадите, я удалю свой.
- 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