You've already forked MicroPythonOS
mirror of
https://github.com/m5stack/MicroPythonOS.git
synced 2026-05-20 11:51:27 -07:00
sdl2_demo: capture keypresses on screen
This commit is contained in:
+53
-1
@@ -1,9 +1,38 @@
|
||||
import sdl2
|
||||
import sdl2.ext
|
||||
import sdl2.sdlttf
|
||||
import ctypes
|
||||
|
||||
# Initialize SDL2 and TTF
|
||||
sdl2.ext.init()
|
||||
sdl2.sdlttf.TTF_Init()
|
||||
|
||||
# Create window and renderer
|
||||
window = sdl2.ext.Window("Test", size=(800, 600))
|
||||
window.show()
|
||||
renderer = sdl2.ext.Renderer(window)
|
||||
|
||||
# Load font
|
||||
font = sdl2.sdlttf.TTF_OpenFont(b"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 24)
|
||||
if not font:
|
||||
print("Failed to load font!")
|
||||
exit(1)
|
||||
|
||||
# Initialize text variables
|
||||
last_key = "No key pressed"
|
||||
text_surface = None
|
||||
text_texture = None
|
||||
|
||||
def render_text(text):
|
||||
global text_surface, text_texture
|
||||
# Clean up previous texture
|
||||
if text_texture:
|
||||
sdl2.SDL_DestroyTexture(text_texture)
|
||||
|
||||
# Create new surface and texture
|
||||
color = sdl2.SDL_Color(r=255, g=255, b=255)
|
||||
text_surface = sdl2.sdlttf.TTF_RenderText_Solid(font, text.encode('utf-8'), color)
|
||||
text_texture = sdl2.SDL_CreateTextureFromSurface(renderer.sdlrenderer, text_surface)
|
||||
|
||||
running = True
|
||||
while running:
|
||||
@@ -12,5 +41,28 @@ while running:
|
||||
if event.type == sdl2.SDL_QUIT:
|
||||
running = False
|
||||
elif event.type == sdl2.SDL_KEYDOWN:
|
||||
print(f"Key pressed: {event.key.keysym.sym}")
|
||||
# Update text with pressed key
|
||||
last_key = f"Key pressed: {sdl2.SDL_GetKeyName(event.key.keysym.sym).decode()}"
|
||||
render_text(last_key)
|
||||
|
||||
# Clear screen
|
||||
renderer.clear()
|
||||
|
||||
# Render text if available
|
||||
if text_texture:
|
||||
w, h = ctypes.c_int(), ctypes.c_int()
|
||||
sdl2.SDL_QueryTexture(text_texture, None, None, ctypes.byref(w), ctypes.byref(h))
|
||||
dstrect = sdl2.SDL_Rect(x=10, y=10, w=w.value, h=h.value)
|
||||
sdl2.SDL_RenderCopy(renderer.sdlrenderer, text_texture, None, dstrect)
|
||||
|
||||
# Update display
|
||||
renderer.present()
|
||||
|
||||
# Cleanup
|
||||
if text_texture:
|
||||
sdl2.SDL_DestroyTexture(text_texture)
|
||||
if text_surface:
|
||||
sdl2.SDL_FreeSurface(text_surface)
|
||||
sdl2.sdlttf.TTF_CloseFont(font)
|
||||
sdl2.sdlttf.TTF_Quit()
|
||||
sdl2.ext.quit()
|
||||
|
||||
Reference in New Issue
Block a user