Python TypeError:初始值必须是str或None,而不是bytes

Python TypeError:初始值必须是str或None,而不是bytes,python,python-3.x,typeerror,Python,Python 3.x,Typeerror,这是我的代码。我开始学习python类,并试图编写一个简单的GUI应用程序从输入的URL下载图像,但这部分有一个问题: self.i=Image.open(StringIO(self.r.content))。 请告诉我我做错了什么。self.r.content是二进制数据(一个bytes对象),但StringIO是文本数据。您想在此处使用io.BytesIO: # -*- coding : utf-8 -*- import tkinter as tk import requests from P

这是我的代码。我开始学习python类,并试图编写一个简单的GUI应用程序从输入的URL下载图像,但这部分有一个问题: self.i=Image.open(StringIO(self.r.content))。
请告诉我我做错了什么。

self.r.content
是二进制数据(一个
bytes
对象),但
StringIO
是文本数据。您想在此处使用
io.BytesIO

# -*- coding : utf-8 -*-
import tkinter as tk
import requests
from PIL import Image
from io import StringIO


class Window:
    def __init__(self, master):
        self.master = master
        self.url = tk.Entry()
        self.url.get()
        self.url.grid(row=0, column=1)
        self.button = tk.Button(text="Download", command=self.get_url)
        self.button.grid(row=0, column=0)
        self.label = tk.Label(text="Name")
        self.label.grid(row=1, column=0)
        self.path = tk.Entry()
        self.path.grid(row=1, column=1)

    def get_url(self):
        self.r = requests.get(self.url.get())
        self.i = Image.open(StringIO(self.r.content))
        self.i.save(self.path.get())


def main():
    root = tk.Tk()
    w = Window(root)
    root.mainloop()


if __name__ == "__main__":
    main()
from io import BytesIO

self.i = Image.open(BytesIO(self.r.content))