You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将qrcode.image.pil.PilImage转换为PIL.Image.Image?

解决CTkImage与qr_code库生成图片的类型不兼容问题

问题原因

qr_code库生成的PilImage是该库自定义的子类,尽管它继承自PIL的Image.Image,但CustomTkinter的CTkImage对类型检查要求严格,直接传入会触发类型不匹配错误。

解决方案

只需将qr_code生成的PilImage显式转换为PIL原生的Image.Image实例即可,提供两种可行方法:

方法1:通过convert方法转换

利用PIL图片的convert()方法返回原生Image对象:

import qrcode
from PIL import Image
import customtkinter as ctk

# 生成二维码
qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4)
qr.add_data("你的二维码内容")
qr.make(fit=True)

# 生成qr_code的PilImage对象
qr_pil_img = qr.make_image(fill_color="black", back_color="white")

# 转换为PIL原生Image对象
pil_img = qr_pil_img.convert("RGB")

# 创建CTkImage并使用
ctk_img = ctk.CTkImage(light_image=pil_img, size=(200, 200))
label = ctk.CTkLabel(master=app, image=ctk_img, text="")
label.pack()

方法2:直接获取PilImage内部的原生Image实例

qr_code的PilImage类内部维护了一个原生的PIL Image对象,可直接通过image属性获取:

# 生成qr_code的PilImage对象后,直接取内部image属性
pil_img = qr_pil_img.image

# 创建CTkImage并使用
ctk_img = ctk.CTkImage(light_image=pil_img, size=(200, 200))

两种方法都能满足CTkImage的类型要求,任选其一即可。

内容的提问来源于stack exchange,提问作者Adrian8115

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:15:09