如何使用Python读取SVG格式二维码文件并在屏幕显示?
嘿,这个需求很常见!要在Python里显示SVG格式的二维码,我给你整理了几个实用的方案,你可以根据自己的场景选:
方法1:使用Pillow + svglib(通用首选)
这个方案兼容性拉满,不管你是写个小脚本快速看效果,还是要整合到其他项目里都能用。核心思路是把SVG转成PIL能处理的图像对象,然后直接显示。
先装需要的依赖:
pip install pillow svglib
直接上代码,两种写法任你选:
写法1:生成临时文件再显示
from svglib.svglib import svg2rlg from reportlab.graphics import renderPM from PIL import Image # 读取本地SVG二维码文件 drawing = svg2rlg("your_qr_code.svg") # 转成PNG临时文件 renderPM.drawToFile(drawing, "temp_qr.png", fmt="PNG") # 用PIL打开并显示 img = Image.open("temp_qr.png") img.show()
写法2:直接转成PIL对象(无临时文件)
如果你不想生成临时文件,用这个更高效:
from svglib.svglib import svg2rlg from reportlab.graphics import renderPM from PIL import Image drawing = svg2rlg("your_qr_code.svg") # 直接转成PIL Image对象 pil_img = renderPM.drawToPIL(drawing) pil_img.show()
方法2:使用Tkinter + svgTk(轻量GUI场景)
要是你正在用Tkinter做桌面小工具,直接用svgTk可以在Tk窗口里原生渲染SVG,不用转格式,更清爽。
先装依赖:
pip install svgtk pillow
代码示例:
import tkinter as tk from svgtk import SvgImage # 创建Tk窗口 root = tk.Tk() root.title("SVG二维码预览") # 加载SVG文件,还能直接调整大小 svg_img = SvgImage(file="your_qr_code.svg") svg_img.config(width=300, height=300) svg_img.pack(padx=20, pady=20) # 启动GUI循环 root.mainloop()
方法3:使用PyQt5/PyQt6(专业GUI开发)
如果你的项目是基于Qt框架的,那简直赚了——Qt本身自带SVG支持,直接加载显示就行,完全不需要额外的格式转换。
先装对应版本的PyQt:
# 选一个就行,PyQt5或PyQt6 pip install pyqt5 pyqt5-svg # pip install pyqt6 pyqt6-svg
PyQt5的示例代码:
from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtSvg import QSvgWidget import sys app = QApplication(sys.argv) # 创建主窗口 window = QMainWindow() window.setWindowTitle("SVG二维码显示") window.resize(350, 350) # 加载SVG文件到控件 svg_widget = QSvgWidget("your_qr_code.svg") window.setCentralWidget(svg_widget) window.show() sys.exit(app.exec_())
PyQt6的话只需要把导入的PyQt5换成PyQt6,其他逻辑完全一样。
小提示
如果你的SVG不是本地文件,而是字符串形式的二维码数据(比如接口返回的SVG字符串),这些方法也都支持:比如svglib的svg2rlg可以直接传入SVG字符串,Qt的QSvgWidget可以用load()方法加载字符串内容,灵活得很~
内容的提问来源于stack exchange,提问作者Ruosh




