如何设置Pygame窗口全屏显示且不遮挡系统任务栏
解决方案
实现思路
- 不要使用
pygame.FULLSCREEN参数,该参数的设计目标是完全独占屏幕,必然会隐藏任务栏等系统组件 - 你可以直接调用系统原生的窗口最大化功能,和Tkinter的
state("zoomed")实现逻辑完全一致,自动适配系统工作区尺寸,不会遮挡任务栏
Windows平台完美实现方案(和Tkinter zoomed效果100%一致)
直接调用Windows系统自带的窗口最大化API,无需手动计算屏幕尺寸,适配所有分辨率和任务栏位置:
import pygame import ctypes pygame.init() # 先创建任意大小的可缩放窗口 WIN = pygame.display.set_mode((800, 600), pygame.RESIZABLE) pygame.display.set_caption("First Game!") # 获取当前pygame窗口的系统句柄,调用系统最大化方法 hwnd = pygame.display.get_wm_info()['window'] ctypes.windll.user32.ShowWindow(hwnd, 3) # 参数3对应系统的SW_MAXIMIZE指令 WHITE = (255, 255, 255) FPS = 60 def draw_window(): WIN.fill(WHITE) pygame.display.update() def main(): clock = pygame.time.Clock() run = True while run: clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False draw_window() pygame.quit() if __name__ == "__main__": main()
跨平台通用简化方案(适配Mac/Linux/Windows)
不需要调用系统API,手动设置窗口尺寸适配工作区:
import pygame pygame.init() # 获取主显示器的完整分辨率 screen_width, screen_height = pygame.display.get_desktop_sizes()[0] # 减去任务栏预估高度,Windows默认任务栏高度为40,Mac为50,Linux可根据桌面环境调整 work_height = screen_height - 40 # 创建和工作区尺寸一致的窗口,默认位于屏幕左上角 WIN = pygame.display.set_mode((screen_width, work_height), pygame.RESIZABLE) pygame.display.set_caption("First Game!") # 后续逻辑和上文一致,可直接复用
额外说明
- 如果不需要保留窗口标题栏和关闭按钮,可以在
set_mode的参数中添加pygame.NOFRAME,窗口会完全铺满工作区,视觉效果和全屏一致但不会遮挡任务栏 - 如果需要适配多显示器场景,可通过
pygame.display.get_desktop_sizes()获取所有显示器的分辨率,再对应调整窗口位置即可
内容的提问来源于stack exchange,提问作者Roni
相关产品推荐
相关产品推荐

