Выход из полноэкранного отображения Pygame по событию Keyboard, в то же время занимаясь другими делами - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу выйти из полноэкранного режима моего дисплея пигмеев, нажав f .Я понимаю, что могу заархивировать выход из полноэкранного режима с помощью:

pygame.display.toggle_fullscreen()

и получить событие клавиатуры с помощью:

    for event in pygame.event.get(): 
        if event.type == KEYDOWN:
            logging.warning("event")
            if event.key == K_f:
                logging.info("TOGGLE: toggle fullscreen")
                return 1 

Моя проблема заключается в том, что мне нужно оставить функцию, в которой инициализируется дисплей,Я не могу оставаться там, пока не произойдет событие.Но я заметил, что получение события клавиатуры вне этой функции не работает (без отображения -> без клавиатуры).Поскольку у меня не может быть двух дисплеев, я могу отметить «фальшивый» один для события клавиатуры.Я также не хочу перестраивать свой дисплей снова, если нет соответствующих событий (в противном случае я мог бы просто вызывать время от времени функцию инициализации и проверять мои события там).

Возможно ли запретить пигмею использовать клавиатуру?Так я могу использовать Keyboardinterrupt, чтобы выйти из полноэкранного режима?Я что-то пропустил?Спасибо за любую помощь.Надеюсь это не смущает.

1 Ответ

0 голосов
/ 15 февраля 2019

Документация для pygame.display.toggle_fullscreen() гласит:

Эта функция работает только с видеодрайвером UNIX X11.В большинстве случаев лучше вызывать pygame.display.set_mode () с новыми флагами отображения.

Так что, похоже, вам, вероятно, придется воссоздать поверхность верхнего уровня.

Вот минимальный пример, который реализует это:

import pygame
pygame.init()

def init_screen(full=False):
    resolution = (1024, 768)
    if full:
        return pygame.display.set_mode(resolution, pygame.FULLSCREEN)
    else:
        return pygame.display.set_mode(resolution)

full_screen = False
screen = init_screen(full_screen)
finished = False
clock = pygame.time.Clock() #for limiting FPS
while not finished:
    for event in pygame.event.get():            
        if event.type == pygame.QUIT:
            finished = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                finished = True
            elif event.key == pygame.K_f:
                full_screen = not full_screen
                screen = init_screen(full_screen)
    if full_screen:
        screen.fill(pygame.color.Color("grey"))
    else:
        screen.fill(pygame.color.Color("aquamarine"))
    pygame.display.flip()
    clock.tick(60)
pygame.quit()

Если вам нужны какие-либо дополнительные разъяснения, сообщите нам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...