Python PySimpleGui-当url是远程的(或者当其jpg时)无法显示图像

Python PySimpleGui-当url是远程的(或者当其jpg时)无法显示图像,python,pysimplegui,Python,Pysimplegui,我将跟随图像查看器演示,并对代码进行了修改,如下所示 from PIL import Image,ImageTk import requests import PySimpleGUI as sg import io def get_img_data(f, maxsize=(800, 640), first=False): """Generate image data using PIL """ img = Image.open(f) img.thumbnail(maxsize)

我将跟随图像查看器演示,并对代码进行了修改,如下所示

from PIL import Image,ImageTk
import requests
import PySimpleGUI as sg
import io

def get_img_data(f, maxsize=(800, 640), first=False):
"""Generate image data using PIL
"""
    img = Image.open(f)
    img.thumbnail(maxsize)
    if first:                     # tkinter is inactive the first time
        bio = io.BytesIO()
        img.save(bio, format="PNG")
        del img
        print(bio.getvalue())
        return bio.getvalue()
    return ImageTk.PhotoImage(img)

url = 'https://upload.wikimedia.org/wikipedia/commons/c/c5/JPEG_example_down.jpg'
response = requests.get(url,stream=True)
image_data = get_img_data(response.raw,first=True)
image_elem = sg.Image(data=image_data)
layout = [
        [image_elem],
         ]

window = sg.Window("Image",layout=layout)
while True:
    event,response = window.read()
    image_elem.update(data=get_img_data(response.raw, first=True))
我得到这个错误

TclError: couldn't recognize image data
在事件循环中,get_img_数据是真是假并不重要。两者都会为我生成此错误,或者生成一个表示

'Too early to create image'
我认为问题可能在于url是jpg,但下面的代码工作正常,并显示了一个png文件

from PIL import Image
import requests
url = 'https://upload.wikimedia.org/wikipedia/commons/c/c5/JPEG_example_down.jpg'
response = requests.get(url,stream=True)
img = Image.open(response.raw)
img.show()

如能对此有所了解,将不胜感激。谢谢

我复制了您的代码并运行了它,但出现了一个错误,
名称io未定义
,因此我添加了
导入io
。我又跑了一遍,拍了一张海滩的照片。但是,当我关闭图像时,会显示另一个错误。错误是,
“dict”对象没有属性“raw”
。您问题中的错误与此无关,是吗?很抱歉,忘记添加导入io,我将更新主要帖子。为了清楚起见,您使用python3运行了此代码,并且能够看到图像。如果这是真的,那就很奇怪了,因为我在多台电脑上都试过了。即使我从参考网站上复制了代码,我也能确认海边的风景(尽管图像有点粗糙)。我的环境是mac os 10.13.6,python 3.6.6 PySimpleGUI 4.18.0,Pillow 6.2.1,请求2.22.0。
$python3-c“导入tkinter;打印”(tkinter.TkVersion)
->8.6我复制了你的代码并运行了它,得到了一个错误
名称io未定义
,因此我添加了
导入io
。我再次运行了它,得到了海滩场景的图片。但是,当我关闭图像时,会显示另一个错误。错误是
'dict'对象没有属性'raw'
。你问题中的错误不是ab是吗?很抱歉忘了添加导入io,我将更新主帖子。为了清楚起见,您使用python3运行了此代码,并且能够看到图像?如果这是真的,那很奇怪,因为我在多台计算机上尝试了此操作。即使我从引用站点复制了代码,我也能够确认海边的风景(虽然图像有点粗糙)。我的环境是mac os 10.13.6,python 3.6.6 PySimpleGUI 4.18.0,Pillow 6.2.1,请求2.22.0。
$python3-c“导入tkinter;打印(tkinter.TkVersion)”
->8.6