Windows下Python3.6用RSVG与Cairo加载SVG至tkinter框架报错求助
解决Windows Python 3.6中缺失librsvg-2-2.dll的问题
我之前在Windows上做SVG转tkinter图像的时候也踩过这个坑!你遇到的WinError 126就是因为系统找不到librsvg-2-2.dll,而且这个DLL还依赖一堆GTK相关的库,单独下载根本用不了,下面给你几个实用的解决办法:
方法一:配齐GTK依赖库
因为你用的是32位的Python 3.6,所以要找32位的GTK+ 3运行时包(选3.24.x版本就好,兼容性强):
- 安装这个运行时包后,找到安装目录里的
bin文件夹 - 把下面这些关键DLL复制到你的Python脚本所在目录,或者把
bin路径添加到系统PATH环境变量里:librsvg-2-2.dlllibgobject-2.0-0.dlllibglib-2.0-0.dlllibcairo-2.dll
这样你的rsvg workaround代码就能正常调用这些库了。
方法二:检查依赖完整性
如果复制后还是报错,推荐用Dependency Walker工具打开librsvg-2-2.dll,它会帮你列出所有缺失的依赖文件,你只需要从GTK的bin目录里把对应的DLL一并复制过来就行。
方法三:换用无DLL依赖的方案(更省心)
要是不想折腾GTK的一堆库,直接用svglib和pillow就能把SVG转成tkinter支持的图像,步骤超简单:
- 先装依赖:
pip install svglib pillow - 替换你原来的测试代码,直接在tkinter里显示SVG:
import io from svglib.svglib import svg2rlg from reportlab.graphics import renderPM from PIL import Image, ImageTk import tkinter as tk root = tk.Tk() # 加载SVG并转换成PIL图像 svg_drawing = svg2rlg("YOUR-FILE-HERE.svg") png_bytes = renderPM.drawToString(svg_drawing, fmt="PNG") pil_image = Image.open(io.BytesIO(png_bytes)) # 转成tkinter能用的PhotoImage tk_image = ImageTk.PhotoImage(pil_image) # 用Label显示图像 label = tk.Label(root, image=tk_image) label.pack() root.mainloop()
这个方案完全不需要额外的DLL,在Windows环境下用起来特别省心。
内容的提问来源于stack exchange,提问作者Andereoo
相关产品推荐
相关产品推荐

