Repository navigation
Releases: bvb6417/tkwebui
Releases · bvb6417/tkwebui
Release list
TkWebUI 0.3.1
修复自定义标题栏销毁内置 controls 后,移动窗口反复出现 TclError 的回归问题(#5)。
- 按钮状态同步和绘制跳过已销毁的控件。
- 几何缓存、拖动区域、交互排除区域及按轴 resizable 策略继续正常更新。
- 新增 Windows GUI 回归脚本,覆盖默认控件、销毁整个容器、单独销毁最大化按钮、自定义绘制及挂载前销毁 5 种场景。
已在 Windows + Python 3.11 验证移动窗口、四种 resizable 组合、最小化还原,以及示例启动和截图。用新的 tkwebui 文件夹替换旧版即可,接口不变。
TkWebUI 0.3.0
性能(#4)
Windows 11、150% 缩放,demo 全部 12 个页面,3 次取中位数:
| 0.2.0 | 0.3.0 | |
|---|---|---|
apply_theme |
0.55 s | 0.23 s |
| demo 启动到窗口就绪 | 1.05 s | 0.72 s |
| 页面首次打开(平均) | 286 ms | 209 ms |
- 圆角 / 圆形位图直接生成带透明通道的 PNG,不再拼接颜色字符串、逐像素
transparency_set;圆角贴片的四个角各一次批量写入;颜色解析带缓存。 - 字体检查直接解析目标字体,不再调用
tkfont.families()枚举全部系统字体。 - 线条图标快约 5 倍:每条笔画只计算附近的采样点,同一图标换颜色时复用。
- 以上改动生成的位图与 0.2.0 逐像素一致。
同一窗口下套用主题与不套用主题相比,主题本身的开销为:启动 +0.22 s,页面首次打开平均 +16 ms,再次打开平均 +6 ms。
修复
- 窗口显示后再构建的页面不再先窄后宽:新增
ScrollArea.prepare(width, height),先在可视区域外按最终尺寸完成布局,再显示;demo 的页面切换已改用这种方式。demo 首次显示时也不再能看到页面逐步变宽。 - 关闭菜单、浮层、日历、对话框或通知后,同一窗口上其他组件绑定的
<Configure>等处理器不再一起丢失(Python 3.13 以前unbind的问题)。 Strong.TLabel、Muted.TLabel等样式字体不再被选项数据库的*Font覆盖,加粗标题、小字说明现在按设计显示。- 菜单定位不再修改全局
ctypes.windll.user32的函数原型,避免影响宿主程序自己的 ctypes 调用。 - MenuButton / OptionMenu / 下拉按钮的箭头不再被纵向平铺成多个。
- 切换按钮、工具按钮与其他按钮同高(150% 缩放下 49 px,此前 63 px)。
- 多列表格(
configure_table)除最后一列外保持设定的列宽,多出的宽度只分给最后一列。
新增
page = ui.ScrollArea(deck)
build(page.body)
page.prepare(deck.winfo_width(), deck.winfo_height()) # 屏幕外完成布局
current.pack_forget()
page.pack(fill='both', expand=True)说明见 docs/guide.md。
升级
用新的 tkwebui 文件夹替换旧的即可,已有接口不变。由于样式字体问题已修复,加粗标题和小字说明会和 0.2.0 看起来不同。
TkWebUI 0.2.0
修复
- WindowChrome 与
resizable(False)冲突(#2):固定尺寸窗口现在按请求尺寸打开(此前请求 640×420,实际约 662×476),拖动不再越拖越宽,最小化后还原不再残缺。固定窗口不能再最大化;最大化按钮、双击标题栏和边缘缩放都按resizable()分别对宽、高生效。 - 可调整尺寸的窗口同样按请求尺寸打开,运行中
geometry('宽x高')的尺寸也是精确的。 - 运行中修改
resizable()后,自绘标题栏和窗口尺寸保持正确(Tk 会重建原生窗口,现在会自动重新接管)。
新增
PlaceholderEntry/set_placeholder(#3):输入框为空时显示灰色提示,开始输入后消失。
ui.PlaceholderEntry(parent, placeholder='请输入用户名')
ui.set_placeholder(existing_entry, '搜索') # 已有的 Entry / Combobox / Spinbox / tk.Entry
ui.set_placeholder(readonly_combo, '请选择…') # 只读下拉框未选择时提示是覆盖在输入框上的标签,不是框里的文字:get() 和 textvariable 始终是真实内容,密码框、输入校验和只读状态不受影响;获得焦点后提示仍显示,直到开始输入。
文档
- 多列列表的对齐方式(表项与表头分别设置)。
- 按需滚动条的行为说明。
升级
用新的 tkwebui 文件夹替换旧的即可,已有接口不变。