跳转至

安装

环境要求

项 要求 说明
Python 3.8+ pyproject.toml 里写的是 ^3.7,但硬依赖 Pillow >= 10.2 实际要求 3.8+
Tk 8.6+ tksvg 依赖它;Windows 官方 Python 自带,Linux 需要 python3-tk
平台 Windows / macOS / Linux 本项目的开发与回归环境是 Windows + CPython 3.13 + Tk 8.6.15

可以用一条命令确认 Tk 版本:

import tkinter

print(tkinter.TkVersion)      # 8.6

安装

pip install -U tkdeft

这会带上这些硬依赖,一般不需要你操心:

包 作用
tksvg 让 Tkinter 能显示 SVG(默认引擎就是它)
svgwrite 生成矢量图
pillow 位图处理与 PhotoImage 转换;Pillow 引擎也靠它
numpy 栅格引擎的像素运算
tkextrafont 加载内嵌字体,保证跨平台外观一致
easydict 组件属性容器(DObject.attributes)

可选:更快的绘制引擎

默认引擎 tksvg 的工作方式是"生成 SVG → 写临时文件 → 再读回来栅格化",每次重绘都要碰磁盘。 装上进程内栅格引擎后,图元直接在内存里出图:

pip install "tkdeft[skia]"      # skia-python,速度与画质最好
pip install "tkdeft[cairo]"     # pycairo
pip install "tkdeft[raster]"    # 上面两个都装

不装也能用——Pillow 引擎(编号 3)零额外依赖,永远可用。

验证安装

import tkdeft

print(tkdeft.__version__)            # 0.4.0

from tkdeft.engines import describe_engines

for row in describe_engines():
    state = "可用" if row["available"] else f"缺依赖 {list(row['requires'])}"
    print(f"{row['index']}  {row['name']:8s} {state}")
0  tksvg    可用
1  wand     可用
2  skia     可用
3  pillow   可用
4  cairo    可用

tksvg 与 pillow 应当总是可用;skia / cairo / wand 取决于你装了什么。 能列出名字不等于能用——判据是 available 那一列。

三个常见安装问题

1. ModuleNotFoundError: No module named 'tkdeft.engines'

环境里装的是 0.2.0 之前的 tkdeft(没有引擎层):

pip install -U tkdeft

如果你在 IDE 里跑的是仓库源码,而 import 又命中了 site-packages 里的旧版本, 请参考下一节"参与开发"里的做法,把仓库以 editable 方式装进环境。

2. 装了 skia 却提示缺依赖

set_engine("skia") 会检查依赖并直接报错,而不是静默退回慢路径:

from tkdeft.engines import set_engine

set_engine("skia")
# ValueError: 绘制引擎 'skia' 不可用,缺少依赖:('skia', 'numpy', 'PIL')

常见原因是把包装进了另一个 Python 解释器。用 sys.executable 确认一下:

python -c "import sys; print(sys.executable)"
python -m pip install "tkdeft[skia]"

3. 界面一个像素都不能变

默认引擎仍然是 tksvg,正是为了让老项目升级后外观不变; 栅格引擎与它在抗锯齿上有亚像素差异。要显式切换:

from tkdeft.engines import set_engine

set_engine("skia")     # 或 set_engine(2)

参与开发(editable 安装)

在仓库目录里:

git clone https://github.com/XiangQinxi/tkdeft.git
cd tkdeft
python -m pip install -e .

editable 安装让 import tkdeft 稳定命中仓库代码,改完立即生效,不用重装。

测试脚本会自己插 sys.path,别被它骗了

benchmarks/ 里的脚本会把仓库路径插到 sys.path 最前面,所以"检查全过" 不等于用户在 IDE 里直接运行就没问题。改完公共接口后,请另外用真实方式 跑一遍。踩坑记录见 回归与性能。

只刷新版本元数据、不动依赖:

python -m pip install -e . --no-deps

下一步