跳转至

发布 0.3.0:把接口补齐、讲清楚

这一版没有新组件,做的是把 tkdeft 的对外接口补齐、并让 tkfluent 用上它们; 绘制结果与 0.2.0 逐项一致(24 个按钮状态 × 5 引擎的像素差没有变化)。

绘制引擎层

  • 引擎注册表补充 available_engines() / engine_names() / engine_index() / engine_from_index() / describe_engines() / reset_engine() / unregister_engine()
  • 引擎基类新增 render(spec)(按规格类型自动分发)、supports(kind)、info()、index
  • 拼错引擎名不再静默退回慢路径,而是抛 UnknownEngineError (ValueError 子类,带"你是不是想用 …"的提示)
  • 渲染入口新增 render(spec) 与 RENDERERS; 渲染失败可用 last_engine_error() / clear_engine_error() 查询
  • 三种规格补齐 from_box()(按坐标对构造)、pixels、to_dict()、describe()、kind

画布层

  • DCanvas 新增统一绘制入口 draw_roundrect() / draw_track() / draw_thumb(): 有栅格引擎就走位图快速路径,否则自动回退 SVG,返回值一定是 item id
  • 新增可覆盖的 SVG 钩子 draw_roundrect_svg() / draw_track_svg() / draw_thumb_svg() 与 draw_svg_item()——组件不必再抄一遍回退逻辑
  • raster_enabled 属性 / raster=False 参数可以强制走 SVG(做引擎对照时很方便)

绘制后端

  • DSvgDraw 补齐通用图元 create_roundrect() / create_track() / create_thumb()
  • create_svg_image(..., way=None) 默认按当前引擎自动挑 tksvg / Wand
  • tkdeft.svg 新增 svg_paint() / gradient_stop(): None 与 "transparent" 不再让 svgwrite 抛 TypeError—— 以前同一份 RoundRectSpec(outline=None) 在 skia 上正常、换 tksvg 就崩

基础件

  • DObject 补全 dget / dhas / dkeys / dvalues / ditems / dcopy / dreset, dcget(key, default) 可给默认值;实例现在拥有自己的属性字典,不再共享类级默认值
  • 顶层 tkdeft 再导出常用名字;新增 __version_info__

文档

tkfluent 同步

9 个组件里"栅格优先 + SVG 回退"的样板代码收敛到 tkdeft (button / badge / togglebutton / entry / text / listbox / frame / scrollbar / slider, 净删约 400 行)。同时修掉两个被回归漏掉的缺陷:

  • FluListBox.theme() 用参数 style 判断分支 → 点"切换主题"直接崩;
  • --check 自检用 except AttributeError: continue 跳过"没有钩子"的组件, 把钩子内部的 AttributeError 一起吞了——这也是上面那个 bug 一直没被发现的原因。

升级建议

0.3.0 是纯加法:旧代码原样能跑。想顺手改的地方见 从 0.2 升级到 0.3。