跳转至

tkfluent 0.5.0:主题切换终于不再卡了

0.5.0 只做了一件事:重写主题过渡。但这是整个项目里最难缠的问题之一。

在此之前

tkfluent 的控件都是画在 Canvas 上的矢量图。换肤意味着每个控件要重新算配色、 重新生成图形、再插值过渡到目标颜色。旧实现让每个控件各自跑一小段动画, 结果 59 个控件各开各的、各停各的:

  • 整体切换要 2.8 s ~ 4.0 s
  • 颜色变化肉眼可见地不同步,上面的按钮已经变完,下面的还在过渡
  • 快速连点切换主题时,几段动画互相打断,偶尔会留下半新半旧的残影

0.5.0 的做法

把所有控件的过渡收拢到同一条时间轴上,由统一的调度器按帧驱动: 同一帧里所有控件拿到相同的进度,配色只算一次,再分发给每个控件。 过渡因此发生在同一帧内,而不是「一个个排队变」。

结果是 59 个控件的整体切换稳定在 约 30 ms,视觉上是整页一起切换。

同时顺带统一了不同绘制引擎下的表现:tksvg、skia、pillow、cairo、wand 五个引擎现在都走同一套过渡逻辑,换引擎不会再出现颜色对不上的情况。

安装

pip install -U tkfluent

文档在 tkfluent.netlify.app, 源码与更新说明在 GitHub。

接下来

  • 继续补控件(表格、树、日期选择器)
  • 把主题配置抽成独立的 JSON,方便做主题市场
  • 试试把过渡逻辑下放到 tkdeft,让其他基于它的项目也能复用