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

求助:tksvg无法加载libtksvg.so文件,如何在tkinter中加载SVG?

解决方案步骤

1. 先确认共享库文件是否存在

运行以下命令检查目标文件的存在性和权限:

ls -l /usr/local/lib/python3.9/dist-packages/tksvg/libtksvg.so
  • 如果文件不存在,说明tksvg安装不完整,重新安装:
    • 普通用户身份:pip install --force-reinstall tksvg
    • sudo身份:sudo pip install --force-reinstall tksvg

2. 解决sudo环境下的库路径问题

sudo可能会重置环境变量,导致系统找不到tksvg的库文件。可以先临时指定路径测试:

sudo LD_LIBRARY_PATH=/usr/local/lib/python3.9/dist-packages/tksvg python /home/pi/laser/barcode_generator_picture.py

如果能正常运行,就把路径永久加入系统库配置:

  • 创建配置文件:sudo nano /etc/ld.so.conf.d/tksvg.conf
  • 在文件里写入:/usr/local/lib/python3.9/dist-packages/tksvg
  • 保存后更新缓存:sudo ldconfig

3. 统一普通用户与sudo的Python环境

有时候普通用户和sudo用的是不同的Python版本,导致库安装路径不匹配。先对比路径:

# 普通用户
which python && which pip

# sudo用户
sudo which python && sudo which pip

如果路径不一致,用sudo对应的pip重新安装tksvg,比如:sudo pip3 install --force-reinstall tksvg

4. 替代方案:绕过tksvg直接转格式显示

如果tksvg的问题一直解决不了,可以用Pillow+svglib把SVG转成PNG再显示,代码示例:

from svglib.svglib import svg2rlg
from reportlab.graphics import renderPM
from PIL import Image, ImageTk
import customtkinter as ctk

# 把SVG转成临时PNG
drawing = svg2rlg("barcode.svg")
renderPM.drawToFile(drawing, "barcode_temp.png", fmt="PNG")

# 加载并缩放图像
pil_img = Image.open("barcode_temp.png").resize((img_width*3, img_height*3))
tk_img = ImageTk.PhotoImage(pil_img)

# 在customtkinter中显示
label = ctk.CTkLabel(master=root, image=tk_img, text="")
label.image = tk_img  # 必须保留引用,防止被垃圾回收
label.pack()

用完临时PNG可以手动删除,或者代码里加os.remove("barcode_temp.png")。

5. 修复文件权限问题

如果文件存在但还是报错,重置权限确保root能读取:

sudo chmod 644 /usr/local/lib/python3.9/dist-packages/tksvg/libtksvg.so
sudo chown root:root /usr/local/lib/python3.9/dist-packages/tksvg/libtksvg.so

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:44:56