You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:54:18