← Все вопросы

Окно pygame зависает и пишет «Не отвечает» — как починить?

Задан 28 месяцев назад290 просмотров2 ответа
10

Сделал окно, рисую в нём прямоугольник. Окно появляется, но через секунду белеет, курсор крутится и сверху пишет (Не отвечает) / not responding. Закрыть могу только через диспетчер задач. Где косяк?

import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
while True:
    screen.fill((0, 100, 200))
    pygame.display.flip()

2 ответа

14
✓ Принятый ответ — помог автору

Ты не обрабатываешь события. Windows ждёт, что программа будет регулярно «забирать» события окна (pygame.event.get()), и если этого не происходит — считает её зависшей и пишет Не отвечает.

Добавь в цикл разбор событий — буквально это и есть лекарство:

import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))

running = True
while running:
    for event in pygame.event.get():     # вот это обязательно
        if event.type == pygame.QUIT:
            running = False
    screen.fill((0, 100, 200))
    pygame.display.flip()

pygame.quit()

Правило простое: в каждом кадре обязательно прокручивай pygame.event.get(), даже если тебе пока не нужны нажатия. Иначе окно будет «висеть».

5

Заодно сразу добавляй clock = pygame.time.Clock() и clock.tick(60) в конце цикла — без этого цикл крутится с бешеной скоростью и грузит процессор на 100%, что тоже похоже на «зависание».

Ваш ответ

Войдите, чтобы ответить на вопрос.