如何在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
相关产品推荐
相关产品推荐

