pygame能接收用户的文本输入吗?

pygame这个包如何接收用户的中文文本输入?
例如tkinter直接有输入框。
pygame能做到吗?例如让用户输入用户名。

阅读 11.7k
1 个回答

pygame貌似没有直接的输入框给你调用,你可以设置一个点击的事件触发键盘记录,将接收到的字符串实时显示到屏幕上。而中文的话,你可以用拼音转中文的库,不过应该比较麻烦。
我在官网上找到了一个跟我思路差不多的实现,这个不支持中文输入,你可以自己搞一个简单的,例如Pinyin2Hanzi库就可以帮你实现一个简单地转换。应该是inputbox。
还有一个是pygame的pgu库,这是第三方开发的,有输入框,你可以看下文档,具体怎么使用你自己学吧。
http://www.pygame.org/pcr/inp...

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()
    print(inkey
          )
    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()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏