Title: Inputbox Module

Author: Timothy Downs
Submission date: January 23, 2002

Description: A function to display an inputbox and return the inputted text string.

Download: inputbox.py

pygame version required: Any
SDL version required: Any
Python version required: Any

Comments: While pygame still lacks a formal gui module, a variety of informal toolkit components are starting to appear. This inputbox module presents a simple text box and blocks until a lowercase text string is entered. The prompt ("Name" in the picture above) is supplied when the ask function is called, and the user is able to use the backspace key to edit their input.

Messages: 2


# by Timothy Downs, inputbox written for my map editor

# This program needs a little cleaning up
# It ignores the shift key
# And, for reasons of my own, this program converts "-" to "_"

# A program to get user input, allowing backspace etc
# shown in a box in the middle of the screen
# Called by:
# import inputbox
# answer = inputbox.ask(screen, "Your name")
#
# Only near the center of the screen is blitted to

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()

From: zgoda

Date: April 23, 2003 19:03 GMT

Unfortunately, I cann't find any of these "informal toolkits". I think pygame is a bit lacking here - there are SDL UI libraries present.

 

From: nexus

Date: June 17, 2004 06:18 GMT

Just what I was looking for a input, need to make someone enter there name and save to variable. Thank's for the code.

 

Main - Repository - Submit - News

Feedback