qrcode
生成二维码图片(读取用 vision_helper)。
二维码生成:把文字或链接编码为 PNG 图片(CoreImage CIQRCodeGenerator)。
边界:只负责生成,不从图片读取/扫描二维码。识别请用 vision_helper 的 detect_barcodes。无需权限,不联网。
#模块概览
| 项 | 说明 |
|---|---|
| 导入 | import qrcode |
| 适合做什么 | 分享链接、设备配对码、活动签到码 |
| 调用时机 | generate / save 放在按钮回调 |
| 推荐顺序 | 准备文本 → save() 或 generate() → 分享或相册展示 |
| 纠错等级 | L/M(默认)/Q/H,越高越抗污损、容量越小 |
#快速开始
生成 PNG 字节并保存到文件:
已复制
import os
import qrcode
out = os.path.join(os.path.expanduser("~/Documents"), "qr-preview.png")
png = qrcode.generate("https://pythonide.xin", size=512, correction="M")
print("字节数:", len(png))
path = qrcode.save("https://pythonide.xin", out, size=600)
print("已保存:", path)
#AppUI 示例
生成放进按钮回调;appui.Image 不直接显示文件路径,因此展示保存路径文本。
已复制
import appui
import os
import qrcode
state = appui.State(
text="https://pythonide.xin",
path="",
size="512",
)
def make_qr():
out = os.path.join(os.path.expanduser("~/Documents"), "qr-preview.png")
size = int(state.size) if state.size.isdigit() else 512
state.path = qrcode.save(state.text, out, size=size, correction="M")
def body():
return appui.NavigationStack(
appui.Form([
appui.Section("内容", [
appui.TextField("要编码的内容", text=state.text),
appui.TextField("边长(像素)", text=state.size),
]),
appui.Section("生成", [
appui.Button("生成二维码", action=make_qr)
.button_style("bordered_prominent"),
appui.Text(
"已保存到:" + state.path if state.path else "尚未生成"
).foreground_color("secondaryLabel"),
], footer="生成后可用分享或相册查看 PNG。"),
]).navigation_title("二维码")
)
appui.run(body, state=state)
#API 参考
#速查
| API | 作用 |
|---|---|
generate(text, size=512, correction='M') | 返回 PNG bytes |
generate_base64(text, size=512, correction='M') | 返回 Base64 PNG 字符串 |
save(text, path, size=512, correction='M') | 写入文件并返回路径 |
QRCodeError | 生成失败异常 |
#参数
| 参数 | 说明 |
|---|---|
text | 要编码的字符串 |
size | 输出边长(像素),通常 64–4096 |
correction | L(7%) / M(15%) / Q(25%) / H(30%) |
已复制
png = qrcode.generate("Hello", size=256, correction="H")
b64 = qrcode.generate_base64("Hello")
path = qrcode.save("Hello", "/path/qr.png")
#常见错误
| 错误写法 | 后果 | 修正 |
|---|---|---|
用 qrcode 扫描图片 | 模块不支持读取 | 用 vision_helper.detect_barcodes |
| 文本过长 | 编码失败 | 缩短内容或降低纠错等级 |
用 appui.Image 显示文件路径 | 显示不出来 | 保存后用 share 或相册 |
| 保存到不可写路径 | QRCodeError | 改用 ~/Documents |
#相关文档
| 文档 | 用途 |
|---|---|
| vision_helper | 从图片识别二维码/条码 |
| share | 分享生成的 PNG |
#预期效果
运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。