python - 类型错误:initial_value 必须是 str 或 None,而不是 bytes

标签 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 中的类(class),并尝试编写一个简单的 GUI 应用程序来从输入的 URL 下载图像,但这部分有一个问题: self.i = Image.open(StringIO(self.r.content)). 请解释一下我做错了什么。

最佳答案

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

from io import BytesIO

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

关于python - 类型错误:initial_value 必须是 str 或 None,而不是 bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48104288/

相关文章:

python - 在 QLabel 上设置自动换行会打破窗口的大小限制

python - CMD 自动完成无法正常工作

python-3.x - 将 float 转换为具有数字和 nans 的列的整数

python - TypeError: must be string, not datetime.datetime 使用strptime时

javascript - Chrome dev - 无法分配给只读属性

python - Keras 神经网络为每个输入输出相同的结果

python - 为什么在我的代码中 np.array**3 会导致与 (np.array/1)**3 不同的解决方案?

python - 当有加载页面时,在Python中检索HTML表单提交

python - 新手问题 - 将函数一分为二

python - lambdify 返回类型错误 : _lambdifygenerated() missing 1 required positional argument: 'k'