发布 0.2.0:可插拔的绘制引擎层
这一版把"画什么"和"用什么画"彻底分开了,并修掉一批长期存在的真实缺陷。
新东西
- 新增
tkdeft.engines绘制引擎层,可插拔切换tksvg/wand/skia/pillow/cairo - 新增三个进程内栅格引擎(skia-python / Pillow / pycairo),完全不落盘; 其中 Pillow 引擎零额外依赖、永远可用
- 新增按规格的图片缓存:
RoundRectSpec是不可变的,同尺寸同配色的一组控件 共用同一张PhotoImage - 新增 SVG 形状助手
tkdeft.svg,统一并修正圆角矩形几何
修掉的缺陷
| 问题 | 影响 |
|---|---|
DSvgDraw.temppath() 每帧 mkstemp() 且从不关闭 fd |
每绘制一帧泄漏一个句柄 + 一个残留文件 |
DDrawWidget.__init__ 一次性建 4 个临时文件 |
每个控件创建即泄漏 4 个句柄 |
只把图片存进 self._tkimg |
同一画布上多张图片时,除最后一张外都会被 GC,画布 item 变空白 |
RenderManager 调用 widget.winfo_zorder() |
tkinter 没有这个方法,有脏控件就抛 AttributeError |
svgwrite 矩形用 translate(0.5,0.5) + 整宽整高 |
描边中心线压在画布边界上,外侧半个线宽被裁掉 |
细节见常见问题与排查。
性能
栅格引擎配合规格缓存后,按钮重绘快约 39 倍、hover 往返约 52 倍
(本机 120×32 圆角矩形实测)。复现:python benchmarks/run_all.py。