PySimpleGUI如何实现程序启动时自动加载本地图片无需点击按钮
PySimpleGUI 启动自动加载本地图片修改方案
核心修改逻辑
原有代码的图片加载逻辑完全绑定在「Load Image」按钮的点击事件分支下,必须触发点击才会执行。要实现程序启动即自动显示图片,只需要在窗口实例创建完成、进入事件监听循环之前,直接执行图片加载和控件更新代码即可,不需要依赖任何用户交互触发。
具体调整点
- 把原本写在
event == "Load Image"判断内的图片读取、缩放、转字节流、更新Image控件的代码,移动到窗口创建语句之后、while True事件循环之前的位置 - 如果不需要手动触发加载的按钮,可以直接删除布局中的
sg.Button("Load Image")项精简界面 - 保留图片路径前的
r前缀,避免Windows路径中的反斜杠被识别为转义字符,导致路径识别错误 - 创建窗口时添加
finalize=True参数,确保所有控件提前完成初始化,避免进入事件循环前操作控件时报错
修改后可直接运行的代码
import io import PySimpleGUI as sg from PIL import Image # 固定图片路径 IMAGE_PATH = r'D:\Users\j84202301\Desktop\dog.jpg' # 界面布局,不需要Load Image按钮可直接删除对应行 layout = [ [sg.Image(key="-IMAGE-")], [sg.Button("Load Image")] ] window = sg.Window("Image Viewer", layout, finalize=True) # 启动自动加载图片逻辑 try: image = Image.open(IMAGE_PATH) image.thumbnail((200, 200)) bio = io.BytesIO() image.save(bio, format="PNG") window["-IMAGE-"].update(data=bio.getvalue()) except FileNotFoundError: sg.popup_error(f"指定路径下未找到图片:{IMAGE_PATH}") # 事件循环 while True: event, values = window.read() if event == sg.WIN_CLOSED: break # 保留按钮点击加载逻辑,删除按钮的话可同步删掉这段判断 if event == "Load Image": image = Image.open(IMAGE_PATH) image.thumbnail((200, 200)) bio = io.BytesIO() image.save(bio, format="PNG") window["-IMAGE-"].update(data=bio.getvalue()) window.close()
额外说明:代码中增加了文件不存在的异常捕获,避免路径配置错误时程序直接无提示闪退。如果不需要保留按钮加载的能力,删除布局中的按钮项和事件循环里对应的判断分支即可。
内容的提问来源于stack exchange,提问作者Justin Xuereb
相关产品推荐
相关产品推荐

