Получить нажатие клавиш в Python (Pygame) - PullRequest
1 голос
/ 08 мая 2019

У меня есть программа на python, которая отображает фотографии в случайном порядке, используя pygame для их отображения.Я хотел бы использовать полноэкранный режим, но, насколько я знаю, не существует простого способа выйти из полноэкранного окна без отключения питания от моего Raspberry Pi (что вызывает серьезные проблемы).Я хочу создать блок кода, который постоянно опрашивает нажатие клавиши, и когда он обнаруживает, кто-то убивает программу, используя quit ()

, я уже пытался реализовать this и это но я не могу заставить их работать без ошибок.

gameDisplay = pygame.display.set_mode((WIDTH, HEIGHT), pygame.RESIZABLE)
events = pygame.event.get()
#get a random line from the txt file (imgs.txt)
def random_line():
    line_num = 0
    selected_line = ''
    with open('imgs.txt') as f: 
        while 1:
            line = f.readline()
            if not line: break
            line_num += 1
            if random.uniform(0, line_num) < 1:
                selected_line = line
    return selected_line.strip()
while True:       
    img_r = pygame.image.load(random_line())
    img_r = pygame.transform.scale(img_r, (1280, 1024))
    gameDisplay.blit(img_r, (0, 0)) #Replace (0, 0) with desired coordinates
    pygame.display.flip()
    time.sleep(1)

случайно удалил мой старый код, в котором были ошибки, но вот ошибки

Traceback (most recent call last):
  File "/home/pi/Photo Frame/Photo Frame V1.0.py", line 29, in <module>
    GPE = get_pygame_events()
NameError: name 'get_pygame_events' is not defined

Я ожидал, что окно закроется, когда я нажал клавишу w (это была клавиша, которую я пытался опрашивать)

Если вам нужна дополнительная информация, просто спросите

также, я запускаю raspbian lite с установленным вручную графическим интерфейсом, если это влияет на что-либо.

1 Ответ

1 голос
/ 08 мая 2019

Я ожидал, что окно закроется, когда я нажал клавишу w (это была клавиша, которую я пытался опрашивать)

Все, что вам нужно сделать, это добавить цикл обработки событий,Если w передан, то коммутатор находится в состоянии, которое завершает программу:

run = True
while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        # set "run = False" if "w" is pressed
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:  
                run = False

    # [...]

pygame.quit()   
...