Добавить в корзинуПозвонить
Найти в Дзене

Урок 29. Работа с курсором и draw.rect в Pygame

Графическое программирование в Python открывает новые возможности для обучения: ученик видит результат сразу на экране. Библиотека Pygame позволяет создавать интерактивные приложения, игры и обучающие проекты. В этой статье мы разберём: В качестве примера создадим интерактивное окно, где прямоугольник реагирует на наведение курсора и клики мыши. В Pygame курсор — это часть системы событий.
Мы можем: Позиция мыши возвращается в виде координат: (x, y) Синтаксис: pygame.draw.rect(surface, color, rect, width=0) Где: Пример: pygame.draw.rect(screen, (0, 200, 0), (100, 100, 200, 100)) import pygame
import sys
pygame.init()
# Размер окна
WIDTH, HEIGHT = 600, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Работа с курсором и draw.rect")
font = pygame.font.SysFont("arial", 24)
# Прямоугольник
rect = pygame.Rect(200, 150, 200, 100)
running = True
clicked = False
clock = pygame.time.Clock()
while running:
clock.tick(60)
screen.fill((240, 240, 240))
m
Оглавление

Графическое программирование в Python открывает новые возможности для обучения: ученик видит результат сразу на экране. Библиотека Pygame позволяет создавать интерактивные приложения, игры и обучающие проекты.

В этой статье мы разберём:

  • как работает курсор мыши в Pygame
  • как используется функция pygame.draw.rect()
  • как объединить всё это в полноценную программу

В качестве примера создадим интерактивное окно, где прямоугольник реагирует на наведение курсора и клики мыши.

📘 Теория

1. Курсор в Pygame

В Pygame курсор — это часть системы событий.

Мы можем:

  • получить позицию мыши → pygame.mouse.get_pos()
  • проверить нажатие кнопки → pygame.mouse.get_pressed()
  • обработать событие клика → pygame.MOUSEBUTTONDOWN

Позиция мыши возвращается в виде координат: (x, y)

2. Рисование прямоугольника — pygame.draw.rect()

Синтаксис:

pygame.draw.rect(surface, color, rect, width=0)

Где:

  • surface — поверхность (обычно screen)
  • color — цвет в формате (R, G, B)
  • rect — координаты и размеры (x, y, width, height)
  • width=0 — если 0, прямоугольник закрашенный

Пример:

pygame.draw.rect(screen, (0, 200, 0), (100, 100, 200, 100))

🧪 Программа

🎯 Задача программы

  • Нарисовать прямоугольник.
  • Если курсор находится внутри него — цвет меняется.
  • Если нажать мышкой — появляется сообщение.
  • Отображается позиция курсора.

📜 Код программы

import pygame
import sys

pygame.init()

# Размер окна
WIDTH, HEIGHT = 600, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Работа с курсором и draw.rect")

font = pygame.font.SysFont("arial", 24)

# Прямоугольник
rect = pygame.Rect(200, 150, 200, 100)

running = True
clicked = False

clock = pygame.time.Clock()

while running:
clock.tick(60)
screen.fill((240, 240, 240))

mouse_pos = pygame.mouse.get_pos()
mouse_click = pygame.mouse.get_pressed()

for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

# Проверка наведения курсора
if rect.collidepoint(mouse_pos):
color = (0, 200, 0)
if mouse_click[0]: # левая кнопка мыши
clicked = True
else:
color = (200, 0, 0)

# Рисуем прямоугольник
pygame.draw.rect(screen, color, rect)

# Текст координат курсора
coord_text = font.render(f"Курсор: {mouse_pos}", True, (0, 0, 0))
screen.blit(coord_text, (20, 20))

# Сообщение при клике
if clicked:
click_text = font.render("Прямоугольник нажат!", True, (0, 0, 0))
screen.blit(click_text, (180, 300))

pygame.display.flip()

pygame.quit()
sys.exit()
-2
-3

📘 Описание программы с pygame.draw.rect() и курсором

(интерактивный прямоугольник с котом Пуфиком)

Ниже — разбор программы, в которой:

  • рисуется прямоугольник с помощью pygame.draw.rect(),
  • отслеживается положение курсора,
  • проверяется наведение мыши,
  • обрабатывается клик,
  • отображается текстовая реакция.

Это базовый, но очень важный пример для понимания работы графики в Pygame.

1️⃣ Структура программы

Любая программа на Pygame строится по единому принципу:

  1. Инициализация
  2. Создание окна
  3. Основной игровой цикл
  4. Обработка событий
  5. Отрисовка объектов
  6. Обновление экрана

2️⃣ Инициализация

pygame.init()

Эта команда запускает все внутренние модули Pygame:

  • графику
  • шрифты
  • обработку событий
  • таймер

Без неё программа работать не будет.

3️⃣ Создание окна

screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Работа с курсором")
  • (600, 400) — ширина и высота окна.
  • set_caption() — заголовок окна.

screen — это поверхность, на которой мы будем рисовать.

4️⃣ Создание прямоугольника

rect = pygame.Rect(200, 150, 200, 100)

Это объект класса Rect.

Параметры:

(x, y, width, height)

  • 200 — отступ слева
  • 150 — отступ сверху
  • 200 — ширина
  • 100 — высота

Объект Rect удобен тем, что:

  • хранит координаты
  • умеет проверять столкновения
  • поддерживает методы проверки попадания

5️⃣ Основной цикл программы

while running:

Это «сердце» программы.

Он выполняется 60 раз в секунду (если задан clock.tick(60)).

Внутри цикла:

  • проверяются события
  • определяется положение мыши
  • рисуются объекты
  • обновляется экран

6️⃣ Получение позиции курсора

mouse_pos = pygame.mouse.get_pos()

Возвращает координаты:

(x, y)

Например:

(312, 178)

Это текущая позиция курсора внутри окна.

7️⃣ Проверка наведения

rect.collidepoint(mouse_pos)

Метод collidepoint() проверяет:

Находится ли точка внутри прямоугольника?

Если да → возвращает True

Если нет → возвращает False

8️⃣ Изменение цвета через условие

if rect.collidepoint(mouse_pos):
color = (0, 200, 0)
else:
color = (200, 0, 0)
  • Если курсор внутри — прямоугольник зелёный.
  • Если снаружи — красный.

Здесь используется логика if — else.

9️⃣ Рисование прямоугольника

pygame.draw.rect(screen, color, rect)

Разберём параметры:

  • screen — поверхность
  • color — цвет (RGB)
  • rect — координаты и размеры

Если добавить четвёртый параметр:

pygame.draw.rect(screen, color, rect, 3)

Прямоугольник будет не закрашенным, а с рамкой толщиной 3 пикселя.

🔟 Обработка клика мыши

📌 Строка:

mouse_click = pygame.mouse.get_pressed()

Что делает эта команда?

Она проверяет состояние кнопок мыши в данный момент времени.

Функция возвращает кортеж из трёх значений:

(левая, средняя, правая)

Каждое значение — это True или False:

  • True → кнопка нажата
  • False → кнопка не нажата

Пример

mouse_click = pygame.mouse.get_pressed()

if mouse_click[0]:
print("Нажата левая кнопка")

Почему [0]?

Потому что:

  • mouse_click[0] — левая кнопка
  • mouse_click[1] — средняя
  • mouse_click[2] — правая

Индексация начинается с нуля — это правило Python.

Важно понимать

get_pressed() проверяет кнопку пока она удерживается.

Если нужно отследить один щелчок (момент нажатия), обычно используют обработку событий:

for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
print("Клик!")

Это более «чистый» способ для интерфейсов.

1️⃣1️⃣ Отображение текста

Чтобы вывести текст на экран, нужно выполнить два шага.

Шаг 1. Создать текст

text_surface = font.render("Текст", True, (0, 0, 0))

Параметры:

  1. "Текст" — строка, которую хотим показать
  2. True — сглаживание (делает буквы более мягкими)
  3. (0, 0, 0) — цвет в формате RGB

RGB — это:

  • 255 — максимум цвета
  • 0 — отсутствие цвета

Например:

  • (255, 0, 0) — красный
  • (0, 255, 0) — зелёный
  • (0, 0, 255) — синий
  • (0, 0, 0) — чёрный

Что возвращает render()?

Он создаёт поверхность (Surface) с текстом.

Но текст ещё НЕ показан на экране.

Шаг 2. Разместить текст

screen.blit(text_surface, (x, y))

Что происходит?

  • screen — это окно программы
  • blit() — «приклеивает» изображение к экрану
  • (x, y) — координаты, где появится текст

Например:

screen.blit(text_surface, (100, 200))

Текст появится:

  • 100 пикселей от левого края
  • 200 пикселей от верхнего края

Простой пример

-4
import pygame

pygame.init()

screen = pygame.display.set_mode((600, 400))
font = pygame.font.SysFont(None, 40)

running = True
while running:
screen.fill((255, 255, 255))

mouse_click = pygame.mouse.get_pressed()

if mouse_click[0]:
text_surface = font.render("Левая кнопка нажата", True, (0, 0, 0))
screen.blit(text_surface, (150, 180))

for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

pygame.display.update()

pygame.quit()

Главное запомнить

✔ pygame.mouse.get_pressed() — проверяет, удерживается ли кнопка
✔ [0] — левая кнопка
✔ font.render() — создаёт изображение текста
✔ screen.blit() — размещает его на экране
✔ Без pygame.display.update() ничего не отобразится

1️⃣2️⃣ Обновление экрана

pygame.display.flip()

Без этой команды изменения не будут видны.

🎯 Полная логика работы программы

  1. Запускается окно.
  2. Рисуется прямоугольник.
  3. Курсор двигается.
  4. Если курсор попадает внутрь:
    цвет меняется
    при клике появляется сообщение.
  5. Программа работает до закрытия окна.

Заключение

Мы разобрали два важных механизма работы в Pygame — обработку нажатий мыши и вывод текста на экран.

Теперь становится понятно, что:

  • pygame.mouse.get_pressed() позволяет узнать, удерживается ли кнопка мыши;
  • индексы [0], [1], [2] соответствуют левой, средней и правой кнопкам;
  • font.render() создаёт изображение текста;
  • screen.blit() размещает его в нужной точке окна;
  • обновление экрана завершает процесс отображения.

Эти инструменты — основа любой интерактивной программы. Именно с них начинается создание кнопок, меню, индикаторов, игровых интерфейсов и обучающих приложений.

Важно не просто копировать код, а понимать последовательность действий:

сначала создаём объект, затем размещаем его на поверхности, и только после этого обновляем экран.

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