Skip to main content

tkdeft

Netlify Status

意为灵巧,灵活轻巧好用

继tkadw之后的tkinter的现代化界面库

开发中


注意

[!NOTE] 这里呢,已经成为tkfluent的基础库了,不含tkfluent的组件。 如果你想体验扩展界面库的效果,请去tkfluent查阅。

原理

先使用svgwrite进行矢量作图(默认会将其存储到临时文件夹中),再用tksvg打开图片,将图片利用Canvas或Label显示出来 index.md

这其中还是有些坑的,比如图片不显示等,导致我以前想做,却放弃了,现在知道错误所在了

绘制引擎

tkdeft 现在把"画什么"和"用什么画"分开了。组件只需要描述一个 RoundRectSpec(尺寸、圆角、填充、描边……),具体由哪个引擎栅格化是可切换的。

from tkdeft.engines import set_engine, list_engines, cache_stats

print(list_engines())      # {'tksvg': True, 'wand': True, 'skia': True, 'pillow': True, 'cairo': True}
set_engine("skia")         # 或 set_engine(2)
print(cache_stats())       # 缓存命中率,便于诊断
引擎 类型 说明 额外依赖
tksvg SVG 默认,保持既有行为 无
wand SVG 经 Wand(ImageMagick) 转 PNG Wand
skia 栅格 skia-python,进程内出图,画质与速度最好 pip install tkdeft[skia]
pillow 栅格 Pillow 超采样,永远可用 无(Pillow 是硬依赖)
cairo 栅格 pycairo pip install tkdeft[cairo]

栅格引擎不写临时文件、不解析 SVG、不碰磁盘;渲染结果按规格缓存, 同尺寸同配色的一组控件共用同一张图片。

实测(120×32 圆角矩形,本机)

场景 优化前 仅修基础设施 + skia 引擎
圆角矩形(尺寸各异) 13.81 ms 4.94 ms 1.26 ms
圆角矩形(参数相同) 10.80 ms 4.33 ms 0.02 ms
按钮重绘 5.95 ms 2.86 ms 0.15 ms
按钮 hover 往返 13.65 ms 6.08 ms 0.26 ms
20 个按钮批量重绘 139.9 ms 110.4 ms 2.93 ms

复现:python benchmarks/run_all.py

已修复的缺陷

这一轮审查中定位并修掉的真实问题(都不是"风格问题"):

问题 影响
DSvgDraw.temppath() 每次调用都 mkstemp() 且从不关闭返回的 fd 每绘制一帧泄漏一个句柄,并在临时目录留下一个残留文件
DDrawWidget.__init__ 一次性 mkstemp() 四个临时文件 每个控件创建即泄漏 4 个句柄(20 个按钮 = 80 个)
DCanvas.create_round_rectangle 只把图片存进 self._img / self._tkimg 同一画布上多张图片时,除最后一张外都会被 GC,画布 item 变空白
RenderManager._render_all 调用 widget.winfo_zorder() tkinter 没有这个方法,只要有脏控件就抛 AttributeError
RenderManager._schedule_render 里 tk._default_root or list(...)[0] 两者都不可用时 IndexError
_draw 结尾又 mark_dirty(self) 集中式调度下同一控件被重绘两遍
svgwrite 生成的矩形用 translate(0.5,0.5) + 整宽整高 描边中心线压在画布边界上,下边框和右边框被完全裁掉
create_svg_image 对 way 未做兜底 回退路径遇到非 0/1 的渲染器编号会直接失败

计划

未来我打算先制作出SunValley设计的库然后就去做别的项目,tkfluent

至于完整文档,我后面会加紧制作的。

设计来源: https://pixso.cn/community/file/ItC5JH1TOwj15EeOPcY7LQ?from_share

为什么不像tkadw一样做跟易用的主题?

因为svg能实现很多漂亮的组件,而我套的模板可能不对其它设计其太大的作用

所以我将这个设计库放在这里当做模板,供其它设计者参考使用。

更新日志

2024-01-22

发布0.0.1版本,模板组件包括DButton

2023-01-23

发布0.0.2版本,补充模板组件DEntry、DFrame、DText, DBadge

2023-01-25

发布0.0.3 0.0.4版本,粗心了,两次补充依赖 发布0.0.5版本,模板组件主题由theme(mode=..., style=...)设置,不再使用如DDarkButton这样的,添加DWindow.wincustom自定义窗口(仅限Windows) 发布0.0.6版本,模板组件DBadge补充样式style=accent,并对自定义窗口进行稍微调整

2023-01-26

发布0.0.7版本,模板库Fluent已移至tkfluent库

2024-09-16

发布0.0.9版本,一些小修改

2025-06-26

发布0.1.0版本,完善功能

2026-09-12

发布0.2.0版本:

  • 新增 tkdeft.engines 绘制引擎层,可插拔切换 tksvg / wand / skia / pillow / cairo
  • 新增进程内栅格引擎(skia-python / Pillow / pycairo),完全不落盘
  • 新增按规格缓存的图片缓存,参数相同的绘制结果直接复用
  • 新增 SVG 形状助手 tkdeft.svg,统一并修正圆角矩形几何
  • 修复临时文件 / fd 泄漏、PhotoImage 被 GC 导致画面空白、 RenderManager 的 winfo_zorder 崩溃等问题
  • 详细缺陷清单与性能数据见 benchmarks/

Metadata

Release files for tkdeft 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tkdeft 0.2.0
File Size Uploaded
tkdeft-0.2.0.tar.gz 1.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for tkdeft 0.2.0
File Interpreter ABI Platform
tkdeft-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.2 MB

Release files / tkdeft-0.2.0.tar.gz

Download URL tkdeft-0.2.0.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
8c6ef0c2844d4f7ae943a095e37aa4e2d23c2e84731fdec9aedb4ba0c3b4e6bc
BLAKE2b-256 checksum
How to use checksums
b5124007442688a22913fe1fa6135f1225a96521ed7b97f0f57b82d5e3b85c2d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.13.5 Windows/11

Release files / tkdeft-0.2.0-py3-none-any.whl

Download URL tkdeft-0.2.0-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
1a37748071551ccdd10d93217b0375312ea98c04dc1fb3ca9c22735fb8157687
BLAKE2b-256 checksum
How to use checksums
423da73012e1d2db91cc9abebc5206accacb37a17c76215541c0133cdd3bf01b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.13.5 Windows/11

Release history Release notifications | RSS feed

0.3.0

2 release files

This release

0.2.0 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.9

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page