import argparse import pygame import pygame.freetype import sys import time def get_font(size: int): """Return a font surface renderer, falling back to freetype if needed.""" try: pygame.font.init() font = pygame.font.Font(None, size) return "font", font except (NotImplementedError, pygame.error): pygame.freetype.init() font = pygame.freetype.SysFont(None, size) return "freetype", font def render_text(font_kind, font_obj, message): color = (255, 255, 255) if font_kind == "font": return font_obj.render(message, True, color) surface, _ = font_obj.render(message, fgcolor=color) return surface def main(): parser = argparse.ArgumentParser(description="Display a fullscreen message.") parser.add_argument('--message', type=str, default="Hello, Adolfo!", help='Message to display') parser.add_argument('--timeout', type=int, default=0, help='Seconds before auto-dismiss (0 = wait for key)') args = parser.parse_args() pygame.init() screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) pygame.display.set_caption("Fullscreen Message") font_kind, font_obj = get_font(100) text = render_text(font_kind, font_obj, args.message) text_rect = text.get_rect(center=(screen.get_width() // 2, screen.get_height() // 2)) clock = pygame.time.Clock() start_time = time.time() running = True while running: for event in pygame.event.get(): if event.type in (pygame.QUIT, pygame.KEYDOWN, pygame.MOUSEBUTTONDOWN): running = False if args.timeout and (time.time() - start_time) > args.timeout: running = False screen.fill((0, 0, 0)) screen.blit(text, text_rect) pygame.display.flip() clock.tick(30) pygame.quit() sys.exit() if __name__ == "__main__": main()