2013-05-24 4 views
0

Я работаю над RPG в pygame/python. Я сделал символ. создатель, который позволяет вам настроить плеер. Теперь я ищу способ запросить имя на экране. Я не хочу, чтобы он сделал поле, просто напечатайте то, что пользователь вводит в определенной области (см. Рисунок). Спасибо за помощь.Текстовое поле ввода в pygame/python

http://ubuntuone.com/3HdzOKroopUEf1YxqNnbFM < ----- Picture (только выглядит синим по ссылке)

ответ

4

Вы можете захватить события, и если Event.type == KeyDown, а затем проверить event.key, чтобы получить какой ключ является нажатие кнопки. Затем вы можете добавить его в текстовую переменную и показать ее на экране.

2

Вы также можете использовать EzText. Это модуль, который в основном делает то, что FRJA описывает для вас. Есть много других модулей, если вы используете Google Pygame для ввода текста. Вот пример кода EzText:

# EzText example 
from pygame.locals import * 
import pygame, sys, eztext 

def main(): 
    # initialize pygame 
    pygame.init() 
    # create the screen 
    screen = pygame.display.set_mode((640,240)) 
    # fill the screen w/ white 
    screen.fill((255,255,255)) 
    # here is the magic: making the text input 
    # create an input with a max length of 45, 
    # and a red color and a prompt saying 'type here: ' 
    txtbx = eztext.Input(maxlength=45, color=(255,0,0), prompt='type here: ') 
    # create the pygame clock 
    clock = pygame.time.Clock() 
    # main loop! 

    while 1: 
     # make sure the program is running at 30 fps 
     clock.tick(30) 

     # events for txtbx 
     events = pygame.event.get() 
     # process other events 
     for event in events: 
      # close it x button si pressed 
      if event.type == QUIT: return 

     # clear the screen 
     screen.fill((255,255,255)) 
     # update txtbx 
     txtbx.update(events) 
     # blit txtbx on the sceen 
     txtbx.draw(screen) 
     # refresh the display 
     pygame.display.flip() 

if __name__ == '__main__': main() 
0

Я недавно написал еще один модуль, который упрощает вставку текста. Вы просто создаете объект TextInput, затем загружаете его событиями в каждый кадр вашей игры и, наконец, возвращаете отображаемую поверхность, используя get_surface().

Вот пример программы, которая демонстрирует, как использовать его:

import pygame_textinput # Import the textinput-module 
import pygame 
pygame.init() 

# Create TextInput-object 
textinput = pygame_textinput.TextInput() 

screen = pygame.display.set_mode((1000, 200)) 
clock = pygame.time.Clock() 

while True: 
    screen.fill((225, 225, 225)) 

    events = pygame.event.get() 
    for event in events: 
     if event.type == pygame.QUIT: 
      exit() 

    # Feed it with events every frame 
    textinput.update(events) 
    # Blit its surface onto the screen 
    screen.blit(textinput.get_surface(), (10, 10)) 

    pygame.display.update() 
    clock.tick(30) 

Если вы хотите, чтобы обработать ввод данных пользователем после того, как он нажал return, просто ждать, пока update() -метод возвращается True:

if textinput.update(events): 
    foo() 

Более подробную информацию и исходный код можно найти на [моей странице github] (my github page.

Смежные вопросы