# -*- 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))。 请解释一下我做错了什么。
答案 0 :(得分:1)
self.r.content
是二进制数据(bytes
个对象),但StringIO
是文本数据。您想在此处使用io.BytesIO
:
from io import BytesIO
self.i = Image.open(BytesIO(self.r.content))