Pygame文本输入不显示

0 投票
1 回答
527 浏览
提问于 2025-04-17 13:25

我需要在pygame的屏幕上输入键盘内容,目前这些内容只显示在空闲的命令行窗口里。有什么建议吗?

这段代码是从一个较大的程序中提取出来的,主要是基于屏幕的,但我有时需要从键盘输入一些数据(数字)。

import sys
import pygame
from pygame.locals import *
pygame.init()

N= ''
screen = pygame.display.set_mode((600,600))
font= pygame.font.Font(None,40)
screen.fill((255,255,255))
pygame.display.flip
pygame.display.update()


def score(C,y):
    SetWnd = font.render( C,True,(0,0,255))
    screen.blit(SetWnd, (15, 100+y))
    pygame.display.update()


def start():
    while True:
        name=''

        for evt in pygame.event.get():
                if evt.type == KEYDOWN:
                    if evt.unicode.isalnum(): # unicode
                        name+=evt.unicode
                        print name,

                    elif evt.key == K_BACKSPACE:
                            name = name[:-1]
                            print name,
                    elif evt.key == K_RETURN:
                        return N
                elif evt.type == QUIT:
                    pygame.quit()
                    sys.exit()
def Pchange(c,y):
    block = font.render(N, True, (0,0,0))
    rect = block.get_rect()
    rect.move_ip(75,100 + y)
    screen.blit(block,rect)
    pygame.display.flip()



score('wind', 0)
score('elev',20)

N = start()
Pchange(N,0)
Pchange(N,20)

1 个回答

0

首先,你的分数是画了两次,我想这应该是没问题的。

问题出在你的开始函数上。在你的循环里,你没有调用任何绘制或更新的函数。

在你的事件处理部分,你往name里加了一个数字,然后在按下回车键时退出了循环。接着你用Pchange画了两次,但你用的函数参数不对。你用的是:

def Pchange(c,y):
    block = font.render(N, True, (0,0,0))

你用的是全局变量N,它的值是空字符串''。所以要解决这个问题,你需要把N改成c

下一个问题是,按下回车后游戏就直接退出了。因为你只粘贴了程序的一部分,所以这可能不是实际情况。如果真是这样的话,你需要再加一个循环,等到按下ESC键时调用pygame.quit()sys.exit()来退出游戏。

撰写回答