Почему моя команда ожидания выполняется до моей команды обновления дисплея?

У меня есть простой код, который ведет себя не так, как я ожидал:

import pygame,sys
from pygame.locals import *
pygame.init()
window = pygame.display.set_mode((1300,700))

while True:
    window.fill((0,0,0))

    pygame.display.update()
    #show black window, should happen before wait

    pygame.time.wait(2000)
    #program waits for 2 seconds, and then shows black window

    for event in pygame.event.get():
        if event.type==QUIT:
            pygame.quit()
            sys.exit(0)

Программа ждет 2 секунды, прежде чем обновить дисплей и показать черное окно. Почему? Поскольку python является интерпретируемым языком, не должно ли pygame.display.update() происходить перед pygame.time.wait(2000)?


person Johnny Dollard    schedule 22.12.2017    source источник
comment
дисплей по умолчанию черный. Так как же узнать, когда он изменится с черного на черный?   -  person furas    schedule 22.12.2017
comment
попробуйте использовать события до fill. Я подозреваю, что в некоторых системах он может использовать события для обновления экрана.   -  person furas    schedule 22.12.2017
comment
это работает для меня. Как выразился @furas, попробуйте вставить вызов pygame.event.pump() перед вызовом wait.   -  person jsbueno    schedule 22.12.2017
comment
@jsbueno Спасибо, кажется, это работает. Я сделаю еще несколько исследований, почему.   -  person Johnny Dollard    schedule 29.12.2017
comment
@furas Мое окно серое, пока я не закрашу его черным. Какие события я должен поставить перед заливкой, чтобы обновить экран?   -  person Johnny Dollard    schedule 29.12.2017
comment
в Linux (Mint) окно всегда черное, поэтому я не знаю, в чем проблема. Попробуйте pygame.event.pump() перед pygame.time.wait или просто поставьте pygame.time.wait после for event in pygame.event.get():. Я в коде всегда использую for event in pygame.event.get(): сразу после while True.   -  person furas    schedule 29.12.2017
comment
@furas Я работаю на Mac, поэтому, наверное, все по-другому. pygame.event.pump() у меня работает. Я передвину for event in pygame.event.get(): в начале программы и посмотрю, работает ли это без помпы. Спасибо!   -  person Johnny Dollard    schedule 30.12.2017