pygame/python中的文本输入框

pygame/python中的文本输入框,python,text,input,pygame,Python,Text,Input,Pygame,我正在用pygame/python开发一个RPG。我做了一个木炭。允许您自定义播放器的创建者。现在我正在寻找一种在屏幕上提示输入姓名的方法。我不想让它成为一个框,只需在特定区域打印用户正在键入的内容(见图)。 谢谢你的帮助 您可以捕获事件,如果event.type==KEYDOWN,则检查event.key以获取用户按下的键。然后,您可以将其添加到文本变量并在屏幕上显示。您也可以使用EzText。这是一个模块,基本上实现FRJA为您描述的功能。如果你在谷歌上搜索“pygame文本输入”,还有很多

我正在用pygame/python开发一个RPG。我做了一个木炭。允许您自定义播放器的创建者。现在我正在寻找一种在屏幕上提示输入姓名的方法。我不想让它成为一个框,只需在特定区域打印用户正在键入的内容(见图)。 谢谢你的帮助


您可以捕获事件,如果event.type==KEYDOWN,则检查event.key以获取用户按下的键。然后,您可以将其添加到文本变量并在屏幕上显示。

您也可以使用EzText。这是一个模块,基本上实现FRJA为您描述的功能。如果你在谷歌上搜索“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()

我最近编写了另一个模块,使插入文本变得更加容易。您只需创建一个
TextInput
-对象,然后在游戏的每一帧向其提供事件,最后使用
get\u 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()
更详细的信息和源代码可以在[my github page]上找到(