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

PyGame设置os.environ['SDL_VIDEO_WINDOW_POS']不生效问题问询

失效原因

SDL_VIDEO_WINDOW_POS 是SDL库在初始化窗口时读取的环境变量,仅在调用pg.display.set_mode()创建/重置窗口前修改才会生效。你当前代码的执行顺序是先创建/切换窗口,再修改环境变量,修改完成时窗口已经生成完毕,自然不会触发位置更新。


修正要点

  • 所有设置窗口位置的操作,必须放到对应pg.display.set_mode()调用的前面
  • 全屏模式下窗口固定铺满屏幕,位置参数无效,不需要额外设置
  • 如果需要初始启动的窗口就位于指定位置,需要在第一次调用pg.display.set_mode()之前就完成环境变量的设置

完整修正代码

import pygame as pg
from tkinter import messagebox as mb
import time
import sys
import requests
import os

def setgamewindowcenter():
    x = 500
    y = 100
    os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)
    print(os.environ['SDL_VIDEO_WINDOW_POS'])

# 初始窗口位置提前设置
setgamewindowcenter()
pg.init()

sc = pg.display.set_mode((1000,750))
try:
    testimg143 = open("Data\\test.txt", "r")
except:
    ud = "ginfo\\"
else:
    ud = ""
    testimg143.close()

#main game loop

gamewindowfullscreen = False

while True:
    for event in pg.event.get():
        if (event.type == pg.KEYUP):
            if (event.key == pg.K_F11):
                if (gamewindowfullscreen == False):
                    sc = pg.display.set_mode((0,0), pg.FULLSCREEN)
                    gamewindowfullscreen = True
                else:
                    # 切换回窗口模式前先设置位置
                    setgamewindowcenter()
                    sc = pg.display.set_mode((1000,750))
                    gamewindowfullscreen = False
                    
        if event.type == pg.QUIT:
                pg.quit()
                exit()

内容的提问来源于stack exchange,提问作者Jeweled

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 19:21:03