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

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.


Связи