У меня небольшая проблема с системой событий Pygame. Вызов set_mode (...) приводит к тому, что события типа VIDEORESIZE возникают очень редко. Я смог воспроизвести это в небольшом сценарии, похожем на пример изменения размера в Pygame, из документов:
#!/usr/bin/python3
import sys
import pygame
from pygame.locals import *
WHITE = (255, 255, 255)
pygame.init()
flags = HWSURFACE|DOUBLEBUF|RESIZABLE
screen = pygame.display.set_mode((300, 300), flags)
screen.fill(WHITE)
pygame.display.flip()
while True:
for event in pygame.event.get():
print(event)
if event.type is QUIT:
pygame.display.quit()
pygame.quit()
sys.exit()
elif event.type is VIDEORESIZE:
# Version 1: do nothing
#pass
# Version 2: set_mode
screen = pygame.display.set_mode(event.size, flags)
screen.fill(WHITE)
pygame.display.flip()
Версия 1: работает должным образом, отображаются все события VIDEORESIZE, белая поверхность не изменяется.
Версия 2: отображаются все события , за исключением 95% событий VIDEORESIZE, белая поверхность изменяет размеры при возникновении события изменения размера (с первого по три из них всегда появляются мгновенно,вероятно только первый вызов pygame.event.get (). Все остальное работает просто отлично.
SW / HW, одинарная / двойная буферизация не имеет никакого значения.
![Version 2, black borders, surface not resizing](https://i.stack.imgur.com/kPELH.png)
Python 3.7.3 Pygame 1.9.5 Linux Mint 19.2 Cinnamon 4.2.4 Linux 4.15.0-66
Были и другие сообщения, но они либо не вызывали set_mode, либо имели другие «симптомы»
Спасибоза вашу помощь!
Редактировать: Работает в Windows 10, даже если для каждого перетаскивания существует только одно событие изменения размера, поэтому «живое изменение размера» отсутствует. Кажется, это ошибка Pygame, есть идеи, как ее обойти?