飞书多维表同步工具2026-07-09v4.0.13
列宽精准校准815px(实测817px)+ERP新增保存路径列
优化v4.0.13
需求描述
- 几个板块右边还是有一小片空白区域,需准确分析容器宽度与列宽总和,务必确保两边不留空白
- ERP报表导出板块增加"保存路径"字段显示,减小任务名称列的宽度
根因分析
v4.0.12基于估算将列宽总和设为760px,但实际通过Tkinter实测(855px主窗口下Treeview.winfo_width())发现:
- 主窗口855px → Notebook 855px → tab_parent(padding=10) 851px → LabelFrame 831px → Treeview 817px
- 实际可用宽度817px,而列宽总和仅760px,右侧空白57px(约7%),这就是用户看到的"一小片空白"
容器宽度组成:855(窗口) - 4(左右padding=10×2内缩) - 20(LabelFrame边框+text) - 14(Treeview padx=5×2+边框) = 817px
改动文件清单
| 文件 | 改动内容 |
|---|---|
tabs/erp_report_tab.py | 新增save_path保存路径列(6列→7列);name列宽415→150(减小);save_path=320承担剩余;_refresh_tasks增加display_path填充(超40字符截断显示...前缀);列宽总和815px |
tabs/sync_tasks_tab.py | 列宽总和760→815px:name 150→160、credential 140→150、folder 200→235(用户输入列加宽吸收57px) |
tabs/credentials_tab.py | 列宽总和760→815px:name 150→155、account 170→185、table_token 180→215(用户输入列加宽吸收57px) |
tabs/log_center_tab.py | 列宽总和760→815px:message 465→520(日志列加宽吸收57px) |
utils/ui_layout.py | LAYOUT_SCHEMA_VERSION 3→4,触发旧列宽清除应用新的815px方案 |
gui_sync.py | 版本号 4.0.12→4.0.13 |
各Tab列宽分配明细(总和均为815px,实测可用817px,留2px安全边距)
| Tab | 固定文字列 | 用户输入列 | 用户输入占比 |
|---|---|---|---|
| sync_tasks | select=40, sync_mode=75, mode=75, status=80 (270px) | name=160, credential=150, folder=235 (545px) | 67% |
| credentials | platform=75, type=110, status=75 (260px) | name=155, account=185, table_token=215 (555px) | 68% |
| erp_tasks | select=40, report_type=100, export_method=65, cycle=65, status=75 (345px) | name=150, save_path=320 (470px) | 58% |
| log_center | level=55, source=85 (140px) | time=155, message=520 (675px) | 83% |
技术要点
- 容器宽度实测法:不再靠估算,而是实际创建855px主窗口+Notebook+Tab+LabelFrame+Treeview,调用
winfo_width()获取真实可用宽度817px。Tkinter的geometry是客户区宽度,但内部控件有padding/边框层层扣减 - ERP保存路径列截断显示:
save_path超40字符显示"..." + save_path[-38:](保留尾部38字符,因为路径末尾的文件名/文件夹名更有意义),配合悬停tooltip显示完整路径 - 2px安全边距:列宽总和815px比实测817px少2px,防止不同DPI/主题下边框差异导致水平滚动条出现。stretch=False确保列不被压缩也不被拉伸
验证结果
自动化测试验证(4项全部通过):
| 测试项 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|
| 语法检查 | 6个文件通过py_compile | 全部通过 | 通过 |
| 各Tab列宽总和=815px | 4个Tab总和815±3px | sync/cred/erp/log均为815px | 通过 |
| ERP新增save_path列 | 7列+heading+column+values+截断逻辑 | 全部配置完整 | 通过 |
| schema_version=4 + 版本号4.0.13 | 均已升级 | 已升级 | 通过 |
踩坑与解决
- v4.0.12估算760px偏差57px:当时没有实测,凭"855-边框-padding"心算得760px,实际Tkinter各层控件(Notebook、LabelFrame、Treeview自身)都有边框和padding扣减,层层累积导致估算偏差。v4.0.13采用实测法彻底解决。教训:涉及像素级布局时必须用
winfo_width()实测,不能靠估算 - ERP name列从415减到150:v4.0.12为填满760px把name撑到415px(过宽),v4.0.13新增save_path列后name回归合理150px,save_path=320承担剩余。任务名通常较短,保存路径才是长文本,分配合理
下一阶段规划
- 观察v4.0.13在780px最小窗口下的显示(列宽总和815px > 最小窗口可用宽度,会出现水平滚动条,这是可接受的折中)
- 若用户反馈780px最小窗口下水平滚动条影响体验,考虑为最小窗口单独配置列宽方案