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

如何在PySimpleGUI中先显示本地占位JPG再点击加载URL来源的JPG图片

PySimpleGUI 占位图+点击加载URL图片实现方案

核心修改说明

  • 修复初始化时空路径读取图片的报错,默认读取本地image.jpg作为占位图
  • 网络图片请求逻辑移至按钮点击事件内,符合「点击后加载URL资源」的需求
  • 对cloudscraper返回的二进制内容包裹BytesIO后再传入PIL,适配PIL读取规则
  • 所有传入PySimpleGUI图片组件的资源统一转为ImageTk.PhotoImage格式,匹配组件参数要求

可运行完整代码

import PySimpleGUI as sg
from PIL import ImageTk, Image
from io import BytesIO
import os
import cloudscraper

# 图片URL
url = "https://cdnb.artstation.com/p/users/avatars/000/149/439/large/fe2b0699a4a2db62eb2814d44c81a0cf.jpg"

# 界面布局:默认加载本地image.jpg作为占位图
imgViewer = [
    [sg.Image(key="-ArtistAvatarIMG-", source=ImageTk.PhotoImage(Image.open("image.jpg")))],
    [sg.Button("获取封面图片", key="Clicky")]
]

layout = [
    [sg.Column(imgViewer)]
]

window = sg.Window("测试界面", layout)

def main():
    while True:
        event, values = window.read()
        if event == "EXIT" or event == sg.WIN_CLOSED:
            break
        if event == "Clicky":
            # 点击按钮后才发起网络请求
            scraper_content = cloudscraper.create_scraper(
                browser={'browser': 'firefox','platform': 'windows','mobile': False}
            ).get(url).content
            # 二进制内容转BytesIO后读取为PIL图片
            im = Image.open(BytesIO(scraper_content))
            # 转成Tk兼容格式后更新组件
            window['-ArtistAvatarIMG-'].update(source=ImageTk.PhotoImage(im))
    window.close()

if __name__ == "__main__":
    cDir = os.getcwd()
    main()

注意事项

使用前请确保本地项目根目录下存在名为image.jpg的占位图片,否则初始化阶段会抛出文件不存在错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:06:05