Перейти к основному содержимому

Python — Pygame, Tkinter и SDL

Разработчику

В Python нет встроенного игрового холста, как <canvas> в браузере. Окно, события и flip() приходят из SDL — библиотеки, на которой построен Pygame.


SDL (Simple DirectMedia Layer)​

Кроссплатформенная C-библиотека для мультимедиа:

  • создание окна ОС
  • поверхность или GPU renderer
  • очередь событий (клавиатура, мышь, quit)
  • таймеры и аудио
  • контекст OpenGL или Vulkan

На SDL работают Pygame, многие эмуляторы, indie на C++, часть движков.

Цикл SDL (псевдокод)​

создать окно и renderer
пока running:
пока есть событие:
если QUIT → running = false
если KEYDOWN → обновить модель ввода
update(модель)
clear + draw
present / flip

Те же три слоя, что в главе 1: события → update → render → swap.


Pygame​

Pythonic-обёртка над SDL2.

import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

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

screen.fill((15, 23, 42))
pygame.draw.circle(screen, (239, 68, 68), (int(x), int(y)), 18)
pygame.display.flip()

clock.tick(60)
МодульНазначение
pygame.drawлинии, круги, rect
pygame.imageload, blit спрайтов
pygame.spriteSprite, Group, collide
pygame.Rectпрямоугольники, colliderect
pygame.mixerзвук
pygame.timeClock, таймеры

display.flip() — двойная буферизация.

Код ITЗагрузка примера кода…

Sprite groups​

all_sprites = pygame.sprite.Group()
enemies = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

all_sprites.update(dt)
hits = pygame.sprite.spritecollide(player, enemies, False)

Группы — структура сцены поверх массива.


Tkinter​

Встроенный GUI Python. Виджет Canvas рисует овалы, линии, изображения; события <Button-1>, <Motion>.

PygameTkinter Canvas
FPS60+ в играхдесятки, для UI
Циклwhile + tickroot.after(ms, callback)
Задачиигры, симуляцииформы, графики, простые UI
def tick():
update_logic()
canvas.delete('all')
canvas.create_oval(x-r, y-r, x+r, y+r, fill='red')
root.after(16, tick)

Для аркад берите Pygame. Tkinter — для форм и лёгкой графики.

Практика: Lab Tkinter, десктоп на Python.


Другие стеки​

БиблиотекаНазначение
Matplotlibнаучные 2D/3D графики
Pillowобработка файлов изображений
Arcadeлёгкие 2D-игры
Panda3D3D
ModernGLтонкий OpenGL из Python

SDL и OpenGL​

Pygame может создать GL-контекст. Для серьёзного 3D чаще Panda3D, Ursina или C++ движок. Логика та же: контекст + цикл + swap — глава 11.


Связи​