如何设置Python Pygame窗口的最小、最大宽高并限制调整范围
Pygame窗口尺寸限制方案
核心思路
通过监听窗口调整事件,结合显示器原生分辨率与自定义最小尺寸,强制窗口尺寸始终处于合法范围内。
实现步骤
- 获取显示器最大分辨率:利用
pygame.display.Info()获取当前显示器的宽高,作为窗口的最大尺寸上限 - 定义最小尺寸阈值:根据需求设置窗口不可缩小的最小宽高
- 监听窗口调整事件:在事件循环中捕获
VIDEORESIZE事件,修正窗口尺寸到合法区间后重新创建窗口
完整代码示例
import pygame import sys # 初始化Pygame pygame.init() # 定义窗口最小尺寸 MIN_WIDTH = 800 MIN_HEIGHT = 600 # 获取显示器最大分辨率 display_info = pygame.display.Info() MAX_WIDTH = display_info.current_w MAX_HEIGHT = display_info.current_h # 初始窗口尺寸(取最小和最大之间的中间值) init_width = max(MIN_WIDTH, min(1200, MAX_WIDTH)) init_height = max(MIN_HEIGHT, min(800, MAX_HEIGHT)) # 创建可调整大小的窗口 screen = pygame.display.set_mode((init_width, init_height), pygame.RESIZABLE) pygame.display.set_caption("尺寸受限的Pygame窗口") while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # 处理窗口调整事件 elif event.type == pygame.VIDEORESIZE: # 计算合法的新尺寸:不小于最小,不大于最大 new_width = max(MIN_WIDTH, min(event.w, MAX_WIDTH)) new_height = max(MIN_HEIGHT, min(event.h, MAX_HEIGHT)) # 重新设置窗口模式 screen = pygame.display.set_mode((new_width, new_height), pygame.RESIZABLE) # 填充背景色(示例) screen.fill((30, 30, 30)) pygame.display.flip()
关键细节说明
pygame.display.Info()获取的是当前主显示器的分辨率,多显示器场景下需额外处理- 每次调整窗口后必须重新调用
pygame.display.set_mode(),否则新尺寸不会生效 - 初始尺寸设置时需同时考虑最小和最大限制,避免窗口一开始就超出范围
内容的提问来源于stack exchange,提问作者Mudit Jain
相关产品推荐
相关产品推荐

