PySimpleGUI点击按钮刷新窗口显示新图片失败,求正确实现方案
PySimpleGUI按钮更新图片失效问题解决
你的代码核心问题是:点击按钮时只执行了window.refresh(),但既没有重新请求API获取新图片,也没有更新界面上的Image元素内容,自然看不到新图片。
下面是修正后的完整代码:
from io import BytesIO import PySimpleGUI as sg from PIL import Image import requests, json def get_meme_image_data(): # 调用API获取图片URL cutURL = 'https://meme-api.herokuapp.com/gimme/wholesomememes' response = requests.get(cutURL) imageURL = json.loads(response.content)["url"] # 下载图片并转换为PySimpleGUI可用的二进制数据 data = requests.get(imageURL).content stream = BytesIO(data) img = Image.open(stream) with BytesIO() as output: img.save(output, format="PNG") return output.getvalue() # 初始化窗口 control_col = sg.Column([[sg.Button('next meme', key='_3_')]]) # 初始加载一张图片 initial_image_data = get_meme_image_data() image_col = sg.Column([[sg.Image(initial_image_data, key='-IMAGE-')]]) layout = [[control_col, image_col]] window = sg.Window('meme', layout, finalize=True) while True: event, values = window.read() if event is None: break if event == '_3_': # 获取新图片数据并更新界面元素 new_image_data = get_meme_image_data() window['-IMAGE-'].update(new_image_data) window.close()
关键修正点:
- 把获取图片的逻辑封装成
get_meme_image_data()函数,避免重复代码,方便按钮事件里调用 - 点击按钮时,重新调用API获取新图片,转换为二进制数据
- 使用
window['-IMAGE-'].update(new_image_data)直接更新Image元素的内容,这才是刷新图片的正确方式,不需要单独调用window.refresh()(update方法会自动触发界面更新)
内容的提问来源于stack exchange,提问作者animesh chaudhri
相关产品推荐
相关产品推荐

