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):- 打开Spyder,点顶部菜单
工具→偏好设置 - 找到
IPython控制台→图形选项卡 - 把后端改成
TkAgg,重启Spyder再运行代码
- 打开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
相关产品推荐
相关产品推荐

