SetWindowPos не устанавливает окно pygame поверх остальных
Пишу приложение на python + pygame. Приведённая ниже функция должна (по идее) создавать окно и делать его поверх остальных. Где бы я не смотрел, а смотрел я много где, всё сводится примерно к такому решению. Ничего не предвещало беды, однако есть проблема, этот код не работает!
def create_window(self, size):
from ctypes import windll
self.display = pygame.display.set_mode(size)
window = pygame.display.get_wm_info()['window']
# window = windll.user32.GetForegroundWindow()
windll.user32.SetWindowPos(window, -1, 0, 0, 0, 0, 0x0001)
Функция выполняется при запуске программы практически сразу (проверено). После производится регулярная обработка событий и обновление дисплея, ума не приложу что может быть не так. Более того, точно такой же код работал в другом проекте на старой машине (тоже Windows 10). Буду очень благодарен, если поможете найти решение.
Вот весь код хоть как-то связанный с отображением:
class HUDTools:
DISPLAY_FLAGS = None
FRAMES_DELAY = 250 # 40 FPS
LOAD_ON_START = ["apps\\welcome"]
def __init__(self):
self._display_manager = DisplayManager()
self._event_processor = EventProcessor()
self._app_manager = AppManager()
def _update(self):
self._display_manager.display.fill((255, 255, 255))
pygame.display.update()
def regenerate_window(self):
bbox = core.BBox((0, 0))
for app in self._app_manager.get_active_rack().apps:
bbox += self._app_manager.get_bounds(app)
self._display_manager.create_window(bbox.get_size())
def _mainloop(self):
while not self._event_processor.done:
self._event_processor.process()
self._update()
pygame.time.wait(HUDTools.FRAMES_DELAY)
def start(self):
# Creating a first rack (group of apps)
self._app_manager.create_rack(set_active=True)
for path in HUDTools.LOAD_ON_START:
app = self._app_manager.load_app(path)
self._app_manager.append_to_active_rack(app)
self.regenerate_window()
self._mainloop()
class DisplayManager:
def __init__(self):
self.display = None
def create_window(self, size):
from ctypes import windll
self.display = pygame.display.set_mode(size)
window = pygame.display.get_wm_info()['window']
# window = windll.user32.GetForegroundWindow()
windll.user32.SetWindowPos(window, -1, 0, 0, 0, 0, 0x0001)
При запуске окно появляется и работает как обычно, единственное что идёт не по плану, так это то что окно не остаётся поверх остальных при выделении какого-либо другого окна.