版本 0.2.0:可切换的渲染引擎
这一版把绘制后端接到了底层的 tkdeft.engines 上, 并修掉一批长期存在的真实缺陷。
新增
- 可切换的渲染引擎:
tksvg(默认)/wand/skia/pillow/cairo
import tkflu
tkflu.set_renderer("skia") # 或 set_renderer(2)
tkflu.get_renderer_name() # -> "skia"
FluLabel宽度自适应:不传width时按文本自动撑开(只增不减), 中文长文本不会再被左右裁掉- 按规格缓存的图片缓存:同尺寸同配色的一组控件共用同一张
PhotoImage
修复
| 问题 | 影响 |
|---|---|
临时文件 / 文件描述符泄漏(旧实现每绘制一帧 mkstemp()) |
长跑程序句柄耗尽 |
PhotoImage 被 GC 导致画布 item 变空白 |
同一画布多张图片时除最后一张外全部消失 |
| 下边框和右边框被裁(描边中心线压在画布边界上) | 按钮看起来只有上/左边框 |
菜单按钮挤成一团(len(label) * 8 对中文严重偏窄) |
"文件" 只算出 16px |
| 菜单项被垂直压扁、底部按钮几乎不可见 | 布局按实测重新调整 |
FluEntry / FluText 的内嵌控件挂到默认根窗口 |
多窗口场景嵌不进去、销毁后不回收 |
关窗后刷 invalid command name ...,甚至 root.destroy() 失败 |
after 回调统一由 tkflu/_after.py 回收 |
性能
栅格引擎配合规格缓存后(本机 120×32 圆角矩形实测):
| 场景 | 默认 tksvg | skia | 提升 |
|---|---|---|---|
| 按钮重绘 | 4.70 ms | 0.076 ms | ≈62× |
| 按钮 hover 往返 | 7.10 ms | 0.16 ms | ≈46× |
| 20 个按钮批量重绘 | 129.8 ms | 2.22 ms | ≈59× |
复现:python benchmarks/run_all.py(在 tkdeft 仓库里)。
文档
- 重写 渲染引擎与性能
- 新增
docs/requirements.txt锁住文档工具链版本