Загрузка данных
from turtle import *
# --- Настройки ---
v = 0 # максимальная скорость черепашки
step = 15 # шаг
# Основная черепашка для рисования
t = Turtle()
t.color('blue')
t.width(5)
t.shape('circle')
t.pendown()
t.speed(v)
# Черепашка для интерфейса (кнопок)
ui = Turtle()
ui.hideturtle()
ui.speed(0)
ui.penup()
# --- Функции рисования и движения (ваши исходные) ---
def draw(x, y):
t.goto(x, y)
def move(x, y):
t.penup()
t.goto(x, y)
t.pendown()
def setRed():
t.color('red')
def setGreen():
t.color('green')
def setBlue():
t.color('blue')
def stepUp():
t.goto(t.xcor(), t.ycor() + step)
def stepDown():
t.goto(t.xcor(), t.ycor() - step)
def stepLeft():
t.goto(t.xcor() - step, t.ycor())
def stepRight():
t.goto(t.xcor() + step, t.ycor())
def startFill():
t.begin_fill()
def endFill():
t.end_fill()
# --- ФУНКЦИИ ДЛЯ ВИЗУАЛЬНОЙ ЧАСТИ ---
# Функция для рисования кнопки (прямоугольник + текст)
def draw_button(x, y, color, text, text_color="black"):
ui.goto(x, y)
ui.pendown()
ui.fillcolor(color)
ui.begin_fill()
for _ in range(2):
ui.forward(60)
ui.left(90)
ui.forward(30)
ui.left(90)
ui.end_fill()
ui.penup()
ui.goto(x + 10, y + 8) # Смещение для текста
ui.color(text_color)
ui.write(text, font=("Arial", 10, "bold"))
ui.color("black") # Сброс цвета для следующих элементов
# Функция для отрисовки всего интерфейса
def draw_interface():
ui.clear()
# 1. Кнопки выбора цвета (Цветовая тема)
draw_button(-280, 200, "white", "Фон белый", "black")
draw_button(-280, 160, "black", "Фон черный", "white")
draw_button(-280, 120, "yellow", "Фон желтый", "black")
# 2. Кнопки перемещения
draw_button(-280, 40, "lightgray", "Вверх (↑)", "black")
draw_button(-280, 0, "lightgray", "Вниз (↓)", "black")
draw_button(-280, -40, "lightgray", "Влево (←)", "black")
draw_button(-280, -80, "lightgray", "Вправо (→)", "black")
# 3. Кнопки изменения толщины пера
draw_button(-280, -160, "lightblue", "Толще (W)", "black")
draw_button(-280, -200, "lightblue", "Тоньше (Q)", "black")
# --- НОВЫЕ ФУНКЦИИ ПО ЗАДАНИЮ ---
def setBgWhite():
t.getscreen().bgcolor("white")
draw_interface() # Перерисовываем интерфейс, чтобы он не пропал
def setBgBlack():
t.getscreen().bgcolor("black")
draw_interface()
def setBgYellow():
t.getscreen().bgcolor("yellow")
draw_interface()
def changeWidthUp():
t.width(t.width() + 1)
def changeWidthDown():
if t.width() > 1: # Минимальная толщина 1
t.width(t.width() - 1)
# --- ОБРАБОТКА КЛИКОВ МЫШЬЮ ПО КНОПКАМ ---
def on_click(x, y):
# Проверяем, попал ли клик в область кнопок (координаты примерные)
# Кнопки фона
if -280 <= x <= -220 and 200 <= y <= 230: setBgWhite()
elif -280 <= x <= -220 and 160 <= y <= 190: setBgBlack()
elif -280 <= x <= -220 and 120 <= y <= 150: setBgYellow()
# Кнопки движения
elif -280 <= x <= -220 and 40 <= y <= 70: stepUp()
elif -280 <= x <= -220 and 0 <= y <= 30: stepDown()
elif -280 <= x <= -220 and -40 <= y <= -10: stepLeft()
elif -280 <= x <= -220 and -80 <= y <= -50: stepRight()
# Кнопки толщины
elif -280 <= x <= -220 and -160 <= y <= -130: changeWidthUp()
elif -280 <= x <= -220 and -200 <= y <= -170: changeWidthDown()
# Если клик не по кнопке, перемещаем черепашку рисования
else:
move(x, y)
# --- Привязка событий ---
t.ondrag(draw)
scr = t.getscreen()
# Привязываем клик мыши к нашей новой функции on_click вместо move
scr.onscreenclick(on_click)
# Цвета пера (клавиши)
scr.onkey(setRed, 'r')
scr.onkey(setGreen, 'g')
scr.onkey(setBlue, 'b')
# Движение стрелками (клавиши)
scr.onkey(stepUp, 'Up')
scr.onkey(stepDown, 'Down')
scr.onkey(stepLeft, 'Left')
scr.onkey(stepRight, 'Right')
# Заливка (клавиши)
scr.onkey(startFill, 'f')
scr.onkey(endFill, 'e')
# Привязки по заданию (клавиши)
scr.onkey(setBgWhite, '1')
scr.onkey(setBgBlack, '2')
scr.onkey(setBgYellow, '3')
scr.onkey(changeWidthUp, 'w')
scr.onkey(changeWidthDown, 'q')
# Отрисовываем интерфейс при запуске
draw_interface()
scr.listen()