如何在 Linux 上以最大化模式启动 pygame 应用程序?

How do I start a pygame app in maximized mode on Linux?

在我开始之前,这不是 How do you start Pygame window maximized? 的副本 我在 Linux 上,win32gui 和 win32con 库不在 运行 上。

如标题所述,我正在尝试做的是在 运行 时最大化我的 pygame window。我不希望通过在 pygame.display.set_mode() 中使用 pygame.FULLSCREEN 标签使游戏全屏显示。我想让它最大化。

我目前最大化它的方法是创建带有 pygame.RESIZEABLE 标志的 window,这允许我获得 pygame.VIDEOEXPOSE 事件,如下例所示。

import pygame, sys

SCREEN_WIDTH,SCREEN_HEIGHT = 1280,720    
SCREEN = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), pygame.RESIZABLE, 32, vsync=1)
objects = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT))
        
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.VIDEORESIZE:
            SCREEN.blit(pygame.transform.scale(objects, event.dict['size']), (0, 0))
            pygame.display.update()
        elif event.type == pygame.VIDEOEXPOSE:  # handles window minimising/maximising
            SCREEN.fill((0, 0, 0))
            SCREEN.blit(pygame.transform.scale(objects, SCREEN.get_size()), (0, 0))
            pygame.display.update()
    pygame.display.update()

objects 表面只是我绘制游戏 objects 的表面,以便在调整 window 大小时缩放它们。如果你想知道为什么我不只是通过使用系统信息获取它来将屏幕宽度和高度设置为屏幕大小,因为那样我的 objects 没有正确缩放。我能够正确缩放 objects 的唯一方法是使用 VIDEORESIZE 和 VIDEOEXPOSE 事件。如果有一种方法可以自动按下最大化按钮或在 pygame 中开始最大化,那就太好了。

刚刚在 pygame github 上找到 this issue 供需要此内容的任何人使用。本质上只是使用 pygame 用来绘制跨平台 windows 的库。

这是对我有用的问题的代码片段。

import sys
import pygame
import pygame._sdl2
import time
 
pygame.init()
screen = pygame.display.set_mode((400, 400), pygame.RESIZABLE)
window = pygame._sdl2.Window.from_display_module()
clock = pygame.time.Clock()

window.maximize()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
     
    screen.fill((255, 255, 255))
     
    pygame.display.flip()
    clock.tick(30)

我希望这对遇到类似问题的人有所帮助。