TypeError:initial_value必须是str或None,而不是字节

时间:2018-01-04 22:06:53

标签: python python-3.x typeerror

# -*- 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()

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

1 个答案:

答案 0 :(得分:1)

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

from io import BytesIO

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