python pygame更新文本标签

python pygame更新文本标签,python,pygame,Python,Pygame,我希望在按下键时更新文本标签,但什么也没发生。它可能与循环有关,但我不确定如何修复它 我正在使用pygame import pygame pygame.init() display_width = 800 display_height = 600 screen = pygame.display.set_mode((display_width, display_height)) done = False pygame.display.set_caption('UTTER') bg = p

我希望在按下键时更新文本标签,但什么也没发生。它可能与循环有关,但我不确定如何修复它

我正在使用pygame

import pygame

pygame.init()

display_width = 800
display_height = 600

screen = pygame.display.set_mode((display_width, display_height))
done = False

pygame.display.set_caption('UTTER')

bg = pygame.image.load("wheel.bmp")

digitalFont = pygame.font.Font("digital-7.ttf",26)

mixValue = "03"

def updateLED (dial, value):
    if dial == "mix":
        mixLED = digitalFont.render(value, 1, (255,255,0))
        screen.blit(mixLED, (362, 166))


while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN:
                updateLED("mix", "01")
                print("down")

    # Add this somewhere after the event pumping and before the display.flip()
    screen.blit(bg, (0, 0))

    updateLED ("mix", "03")

    pygame.display.update()

pygame.quit()
quit()

当您按键时,您可以更改标签

updateLED("mix", "01")
但是您还有另一个
更新的
,它在每个循环中将文本更改为旧文本

updateLED("mix", "03")
所以你看不到新的文本

blit
在缓冲区中绘制(以防止屏幕闪烁)并
pygame.display.update()
将缓冲区发送到屏幕

但还有另一个问题-
KEYDOWN
是一个非常短的事件-当按键状态从“向上”变为“向下”时-而不是在按住按键时

# default text
text = "03"

while not done:


    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN:
                # new text
                text = "01"
                print("down")

        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_DOWN:
                # again old text
                text = "03"
                print("up")

    screen.blit(bg, (0, 0))

    updateLED("mix", text)

    pygame.display.update()