SDL3 Desktop: PySDL3_ttf Setup SDL3 для Desktop: Настройка PySDL3_ttf

A guide to using the SDL3_ttf font extension library with Python and PySDL3. Руководство по использованию библиотеки расширения шрифтов SDL3_ttf с Python и PySDL3.

Prerequisite: Ensure you have PySDL3 installed (e.g., pip install PySDL3==0.9.11b1). Предварительное условие: Убедитесь, что PySDL3 установлен (например, pip install PySDL3==0.9.11b1).

1. Assets 1. Ресурсы

Before creating the files, download the required asset: Перед созданием файлов скачайте необходимый ресурс:

2. Project Structure 2. Структура проекта

Create a project folder named ttf-pysdl3. You can keep your assets in an assets/fonts directory.

Создайте папку проекта с именем ttf-pysdl3. Вы можете хранить свои ресурсы в директории assets/fonts.

ttf-pysdl3/
├── assets/fonts/
│   └── LiberationSans-Regular.ttf
└── main.py

3. Python Implementation 3. Реализация на Python

PySDL3 relies on ctypes to interface with the underlying SDL3 C libraries. Use the following code in your main.py:

PySDL3 использует ctypes для взаимодействия с базовыми библиотеками SDL3 C. Используйте следующий код в вашем main.py:

import ctypes
import os

os.environ["SDL_MAIN_USE_CALLBACKS"] = "1"
os.environ["SDL_RENDER_DRIVER"] = "opengl"

import sdl3

renderer = ctypes.POINTER(sdl3.SDL_Renderer)()
window = ctypes.POINTER(sdl3.SDL_Window)()
textTexture = None

@sdl3.SDL_AppInit_func
def SDL_AppInit(appstate, argc, argv):
    global textTexture

    if not sdl3.SDL_Init(sdl3.SDL_INIT_VIDEO):
        sdl3.SDL_Log("Couldn't initialize SDL: %s".encode() % sdl3.SDL_GetError())
        return sdl3.SDL_APP_FAILURE

    if not sdl3.TTF_Init():
        sdl3.SDL_Log("Couldn't initialize TTF: %s".encode() % sdl3.SDL_GetError())
        return sdl3.SDL_APP_FAILURE

    if not sdl3.SDL_CreateWindowAndRenderer("PySDL3 TTF".encode(), 400, 200, 0, window, renderer):
        return sdl3.SDL_APP_FAILURE

    # Load font (Ensure the path is correct for your system)
    font = sdl3.TTF_OpenFont("assets/fonts/LiberationSans-Regular.ttf".encode(), 48)
    if not font:
        return sdl3.SDL_APP_FAILURE

    textColor = sdl3.SDL_Color(255, 255, 255, 255)
    surface = sdl3.TTF_RenderText_Blended(font, "Hello PySDL3!".encode(), 0, textColor)
    textTexture = sdl3.SDL_CreateTextureFromSurface(renderer, surface)
    sdl3.SDL_DestroySurface(surface)

    return sdl3.SDL_APP_CONTINUE

@sdl3.SDL_AppEvent_func
def SDL_AppEvent(appstate, event):
    if sdl3.SDL_DEREFERENCE(event).type == sdl3.SDL_EVENT_QUIT:
        return sdl3.SDL_APP_SUCCESS
    return sdl3.SDL_APP_CONTINUE

@sdl3.SDL_AppIterate_func
def SDL_AppIterate(appstate):
    sdl3.SDL_SetRenderDrawColor(renderer, 20, 20, 20, 255)
    sdl3.SDL_RenderClear(renderer)

    width, height = ctypes.c_float(), ctypes.c_float()
    sdl3.SDL_GetTextureSize(textTexture, ctypes.byref(width), ctypes.byref(height))
    destRect = sdl3.SDL_FRect(50.0, 75.0, width.value, height.value)
    
    sdl3.SDL_RenderTexture(renderer, textTexture, None, destRect)
    sdl3.SDL_RenderPresent(renderer)
    return sdl3.SDL_APP_CONTINUE

@sdl3.SDL_AppQuit_func
def SDL_AppQuit(appstate, result):
    global textTexture
    sdl3.SDL_DestroyTexture(textTexture)
    sdl3.TTF_Quit()

4. Running the Script 4. Запуск скрипта

Run the script via your terminal:

Запустите скрипт через терминал:

python main.py

Support My Work Поддержать проект

If these tutorials helped you, consider buying me a coffee! Если эти туториалы вам помогли, вы можете поддержать автора.

Sberbank (Russia only) Сбербанк (только для РФ)

Sberbank SBP QR Code

Direct transfer via phone number (Russia only) Перевод по номеру телефона (только для РФ)

+7 (917) 212-29-59

USDT TRC20

USDT TRC20 QR Code

Support via Cryptocurrency Поддержка криптовалютой

TMtY1YifNf6FKvgeFmqKGQR4NStKr3csGp