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

PySimpleGUI窗口在Spyder与终端中尺寸异常及重复绘图缩小问题求助

解决Spyder中PySimpleGUI窗口尺寸不稳定的替代方案
  • 固定窗口尺寸并禁用缩放
    直接给窗口设置固定宽高,同时关闭拖拽缩放功能,每次绘图操作后强制重置窗口尺寸,避免累积缩小的问题。示例代码:

    import PySimpleGUI as sg
    
    # 定义固定窗口尺寸
    FIXED_SIZE = (600, 400)
    layout = [[sg.Canvas(key='-CANVAS-')]]
    window = sg.Window('稳定窗口', layout, size=FIXED_SIZE, resizable=False)
    
    while True:
        event, values = window.read()
        if event == sg.WIN_CLOSED:
            break
        # 绘图完成后强制重置窗口尺寸
        window.set_size(FIXED_SIZE)
    window.close()
    
  • 用独立进程运行GUI代码
    Spyder的IPython环境可能和PySimpleGUI的DPI处理冲突,把GUI代码放到独立进程里跑,彻底隔离环境影响。用multiprocessing实现:

    import multiprocessing
    import PySimpleGUI as sg
    
    def gui_main():
        sg.set_options(scaling=1.0)
        layout = [[sg.Canvas(key='-CANVAS-')]]
        window = sg.Window('独立进程GUI', layout)
        while True:
            event, values = window.read()
            if event == sg.WIN_CLOSED:
                break
        window.close()
    
    if __name__ == '__main__':
        proc = multiprocessing.Process(target=gui_main)
        proc.start()
        proc.join()
    
  • 切换Spyder的图形后端
    Spyder默认后端可能和PySimpleGUI适配不好,切换到TkAgg后端(PySimpleGUI基于Tkinter):

    1. 打开Spyder,点顶部菜单工具→偏好设置
    2. 找到IPython控制台→图形选项卡
    3. 把后端改成TkAgg,重启Spyder再运行代码
  • 手动重置系统DPI感知
    针对Windows系统,每次运行前调用系统API重置DPI感知,再设置固定缩放值,避免累积缩放问题:

    import ctypes
    import PySimpleGUI as sg
    
    # 重置进程DPI感知
    ctypes.windll.shcore.SetProcessDpiAwareness(1)
    # 固定缩放比例
    sg.set_options(scaling=1.0)
    
    layout = [[sg.Canvas(key='-CANVAS-')]]
    window = sg.Window('DPI修复示例', layout)
    # 绘图逻辑...
    window.close()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:38:21