How to get text input from user in pygame?

How to make pygame input file for printing by user:

I try to have the user enter something and pygame prints it on the screen.

This is my current program:

import pygame, pygame.font, pygame.event, pygame.draw, string from pygame.locals import * def get_key(): while 1: event = pygame.event.poll() if event.type == KEYDOWN: return event.key else: pass def display_box(screen, message): "Print a message in a box in the middle of the screen" fontobject = pygame.font.Font(None,18) pygame.draw.rect(screen, (0,0,0), ((screen.get_width() / 2) - 100, (screen.get_height() / 2) - 10, 200,20), 0) pygame.draw.rect(screen, (255,255,255), ((screen.get_width() / 2) - 102, (screen.get_height() / 2) - 12, 204,24), 1) if len(message) != 0: screen.blit(fontobject.render(message, 1, (255,255,255)), ((screen.get_width() / 2) - 100, (screen.get_height() / 2) - 10)) pygame.display.flip() def ask(screen, question): "ask(screen, question) -> answer" pygame.font.init() current_string = [] display_box(screen, question + ": " + string.join(current_string,"")) while 1: inkey = get_key() if inkey == K_BACKSPACE: current_string = current_string[0:-1] elif inkey == K_RETURN: break elif inkey == K_MINUS: current_string.append("_") elif inkey <= 127: current_string.append(chr(inkey)) display_box(screen, question + ": " + string.join(current_string,"")) return string.join(current_string,"") def main(): screen = pygame.display.set_mode((320,240)) print ask(screen, "Name") + " was entered" if __name__ == '__main__': main() 

I want this when the user presses Enter, he clears the screen.

Help me!

+3
source share
1 answer

Here is an example script that brings input to the screen. It shows how you can change the name string while passing through the pygame event queue. Each frame, screen is cleared, and the surface of the name is rebuilt and smoothed.

 import pygame from pygame.locals import * def name(): pygame.init() screen = pygame.display.set_mode((480, 360)) name = "" font = pygame.font.Font(None, 50) while True: for evt in pygame.event.get(): if evt.type == KEYDOWN: if evt.unicode.isalpha(): name += evt.unicode elif evt.key == K_BACKSPACE: name = name[:-1] elif evt.key == K_RETURN: name = "" elif evt.type == QUIT: return screen.fill((0, 0, 0)) block = font.render(name, True, (255, 255, 255)) rect = block.get_rect() rect.center = screen.get_rect().center screen.blit(block, rect) pygame.display.flip() if __name__ == "__main__": name() pygame.quit() 

Here is the gist version

+6
source

Source: https://habr.com/ru/post/1210143/


All Articles