Создание новогодней ёлки с гирляндой: тёмная сцена, снег и звезда | Часть 1

22.12.2025 

Время чтения: 10-15 минут

Что нас ждёт

Если ты когда-нибудь думал, что программирование — это сплошные сухие формулы, серые окна и тоска, то у меня хорошие новости. Прямо сейчас мы шаг за шагом соберём настоящую новогоднюю сцену: тёмный вечер, падающий снег и ёлку со звездой на макушке.

Никакой магии, странных библиотек и «шаманских» приёмов — только Python и Tkinter. Это стандартная библиотека, которая умеет создавать окна и рисовать в них всё, что душе угодно.
После нашей серии статей у вас получится вот такая ёлочка:

gif2 - 1

Подготовка сцены: импорты, палитра и закрытие окна

Начинаем с трёх подключений: tkinter даст окно и холст для рисования, random пригодится дальше (пусть лежит рядом, как коробка с гирляндой), а time поможет делать паузы, чтобы цикл не пытался рисовать 200 тысяч раз в секунду.

import tkinter as tk       # tk — модуль для окон, Canvas и кнопок
import random       # random — чтобы выбирать случайные цвета
import time       # time — чтобы в while-цикле не грузить CPU

Дальше готовим “краски”. Да, это просто строки с цветами, но они задают настроение всей сцене. Хороший бонус: по ним легко менять стиль, не лазая по всему файлу.

# --- цвета ---
orange_color = "#f15a31"      # оранжевый
green_color = "#00b259"       # зелёный
purple_color = "#bd56a0"      # фиолетовый
white_color = "#ffffff"       # белый
red_color = "#ff2400"         # красный
blue_color = "#0000ff"        # синий
yellow_clor = "#edff21"       # желтый
snow_color = "#cdced5"        # грязный белый
night_color = "#101828"       # ночной фон

Мы заведём флаг running — это как “пульс программы”. Пока он True — окно живёт. Нажали крестик — мы вежливо выключаем пульс и закрываем окно.

# --- Состояние ---
running = True      # флаг для while-цикла окна

Холст и геометрия ёлки: фон, сама ёлка и снег

Для начала создадим главное окно программы без которого у нас ничего не появится.

# --- Окно и Canvas (главный поток кода, без main()) ---
root = tk.Tk()       # root — главное окно программы
root.title("Гирлянда на ёлочке — 5 минут")      # заголовок окна

Вот как оно будет выглядеть:

2025 12 23 10 57 33

Нам нужен “лист бумаги”, на котором будет сцена. В Tkinter это Canvas — холст. Также задаём размеры и тёмный фон.

w = 900       # w — ширина Canvas 
h = 540       # h — высота Canvas  
# --- Canvas ---
canvas = tk.Canvas(root, width=w, height=h, bg=night_color) # Canvas — лист для рисования
canvas.pack()      # pack размещает Canvas в нашем окне root

2025 12 23 11 01 11

Чтобы ёлка была симметричной и не сдвигалась чётко зафиксируем её положение и размер, берём центр холста по X, задаём Y макушки, высоту и ширину основания. Это не сухие “переменные ради переменных”, а параметры, которые держат форму.

# --- Рисуем ёлку (простая геометрия) ---
cx = w // 2       # cx — центр ёлки по X
top_y = 65        # top_y — верхушка ёлки (счёт идёт сверху вниз)
tree_h = 350      # tree_h — высота ёлки
base_w = 460      # base_w — ширина основания ёлки

Ёлка — треугольник. В Canvas треугольник удобно рисовать create_polygon: даём точки подряд, получаем залитую фигуру. Контур отключаем, чтобы не выглядело как дорожный знак “Осторожно, ёлка”.
Для того чтобы не запутаться в точках и координатах вот картинка на которой подписаны почти все точки для нашей ёлки:

image 1 1 (1)
image 1 1 (1)
canvas.create_polygon(
    cx, top_y,       # верхний угол
    cx - base_w // 2, top_y + tree_h,       # нижний левый угол
    cx + base_w // 2, top_y + tree_h,       # нижний правый угол
    fill=green_color,       # зелёная ёлка фирменным цветом
    outline=""       # отключаем контур
)

Добавляем ствол прямоугольником с помощью create_rectangle, он создает прямоугольник по 2 противоположенным его углом.

canvas.create_rectangle(
    cx - 45, top_y + tree_h,
    cx + 45, top_y + tree_h + 90,
    fill=orange_color,       # ствол оранжевым цветом
    outline=""
)

И кладём снег внизу — ещё один прямоугольник. Он сразу делает сцену законченной: появляется “земля”, а не пустота.

canvas.create_rectangle(
    4, top_y + tree_h + 90,
    w, h-1,
    fill=snow_color,       # делаем снежную платформу
    outline=""
)

Вот тут уже видно сцену: фон, ёлка, ствол и снег. Всё хорошо но чего то не хватает…

image (1)

Финальный штрих — звезда и цикл обновления окна

Теперь — последнее дополнение для этой части: звезда. Мы не используем картинки, поэтому рисуем её многоугольником. Логика простая: точки чередуются “дальняя — ближняя”, и получается узнаваемая звёздочка. Для этого нам понадобится целых 10 точек!
Первые 6 рисуют сверху вниз правую половину. А остальные 4 точки это первые точки, отраженные относительно вертикали.

Вот первые 3 точки:

2025 12 23 11 57 37

Это первые 6 точек:

2025 12 23 12 02 20

А вот и код для целой звезды. Можно заметить что после cx, top_y + 14 идут те же точки но с измененными знаками у x на противоположные. Это и даёт нам симметрию звезды:

# --- Звезда на макушке ---
canvas.create_polygon(
    cx, top_y - 36,
    cx + 12, top_y - 12, cx + 36, top_y - 12,
    cx + 18, top_y + 4, cx + 24, top_y + 28,
    cx, top_y + 14,
    cx - 24, top_y + 28, cx - 18, top_y + 4,
    cx - 36, top_y - 12, cx - 12, top_y - 12,
    fill=yellow_clor,
    outline=""
)

Осталось удерживать окно “живым”. Тут у нас ручной пульс: root.update() обрабатывает события, а sleep нужен для установки частоты обновления, он не даёт циклу превратить ноутбук в обогреватель.

# --- Главный while-цикл (пока просто держим окно живым) ---
while running:
    root.update()
    time.sleep(0.02)

Теперь ёлка выглядит как готовая сцена: можно честно сказать “первая версия новогодней ёлки готова”.

2025 12 23 11 17 48

Собираем всё вместе

import tkinter as tk       # tk — модуль для окон, Canvas и кнопок
import random       # random — чтобы выбирать случайные цвета
import time       # time — чтобы в while-цикле не грузить CPU


# --- Состояние ---
running = True      # флаг для while-цикла окна

# --- цвета ---
orange_color = "#f15a31"      # оранжевый
green_color = "#00b259"       # зелёный
purple_color = "#bd56a0"      # фиолетовый
white_color = "#ffffff"       # белый
red_color = "#ff2400"         # красный
blue_color = "#0000ff"        # синий
yellow_clor = "#edff21"       # желтый
snow_color = "#cdced5"        # грязный белый
night_color = "#101828"       # ночной фон

# --- Окно и Canvas (главный поток кода, без main()) ---
root = tk.Tk()       # root — главное окно программы
root.title("Гирлянда на ёлочке — 5 минут")      # заголовок окна

w = 900       # w — ширина Canvas (используем несколько раз)
h = 540       # h — высота Canvas (используем несколько раз)

# --- Canvas ---
canvas = tk.Canvas(root, width=w, height=h, bg=night_color)        # Canvas — “лист” для рисования
canvas.pack()       # pack размещает Canvas в окне

# --- Рисуем ёлку (простая геометрия) ---
cx = w // 2       # cx — центр ёлки по X
top_y = 65        # top_y — верхушка ёлки (счёт идёт сверху вниз)
tree_h = 350      # tree_h — высота ёлки
base_w = 460      # base_w — ширина основания ёлки

canvas.create_polygon(
    cx, top_y,       # верхний угол
    cx - base_w // 2, top_y + tree_h,       # нижний левый угол
    cx + base_w // 2, top_y + tree_h,       # нижний правый угол
    fill=green_color,       # зелёная ёлка фирменным цветом
    outline=""       # отключаем контур
)

# --- Звезда на макушке ---
canvas.create_polygon(
    cx, top_y - 36,
    cx + 12, top_y - 12, cx + 36, top_y - 12,
    cx + 18, top_y + 4, cx + 24, top_y + 28,
    cx, top_y + 14,
    cx - 24, top_y + 28, cx - 18, top_y + 4,
    cx - 36, top_y - 12, cx - 12, top_y - 12,
    fill=yellow_clor,
    outline=""
)

canvas.create_rectangle(
    cx - 45, top_y + tree_h,
    cx + 45, top_y + tree_h + 90,
    fill=orange_color,      # ствол оранжевым цветом
    outline=""
)
canvas.create_rectangle(
    4, top_y + tree_h + 90,
    w, h-1,
    fill=snow_color,      # делаем снежную платформу
    outline=""
)

# --- Главный while-цикл (пока просто держим окно живым) ---
while running:
    root.update()
    time.sleep(0.02)

Пробное занятие
с репетитором по математике и программированию

Запишитесь сейчас бесплатно 
Записаться

Понравилась статья?

Подпишись на Телеграм школы, чтобы не пропустить новые статьи и новости
Telegram канал