Keith Power
Keith Power

Reputation: 14151

python pygame update text label

I wish to update a text label when I key press down but nothing happens. It probably have something to do with the loop but I am not sure how to fix it.

I am using 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()

Upvotes: 1

Views: 1546

Answers (1)

furas
furas

Reputation: 142824

When you press key you change label

updateLED("mix", "01")

but you have another updateLED which change text to old one in every loop

updateLED("mix", "03")

so you can't see new text.

blit draws in buffer (to prevent flickering screen) and pygame.display.update() sends buffer to screen.

But there is other problem - KEYDOWN is very short event - when key change state from "UP" to "DOWN" - not when key is held pressed.

# 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()

Upvotes: 3

Related Questions