返回开发日志
飞书多维表同步工具2026-07-09v4.0.13

列宽精准校准815px(实测817px)+ERP新增保存路径列

优化v4.0.13

需求描述

  1. 几个板块右边还是有一小片空白区域,需准确分析容器宽度与列宽总和,务必确保两边不留空白
  2. 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.pyLAYOUT_SCHEMA_VERSION 3→4,触发旧列宽清除应用新的815px方案
gui_sync.py版本号 4.0.12→4.0.13

各Tab列宽分配明细(总和均为815px,实测可用817px,留2px安全边距)

Tab固定文字列用户输入列用户输入占比
sync_tasksselect=40, sync_mode=75, mode=75, status=80 (270px)name=160, credential=150, folder=235 (545px)67%
credentialsplatform=75, type=110, status=75 (260px)name=155, account=185, table_token=215 (555px)68%
erp_tasksselect=40, report_type=100, export_method=65, cycle=65, status=75 (345px)name=150, save_path=320 (470px)58%
log_centerlevel=55, source=85 (140px)time=155, message=520 (675px)83%

技术要点

  1. 容器宽度实测法:不再靠估算,而是实际创建855px主窗口+Notebook+Tab+LabelFrame+Treeview,调用winfo_width()获取真实可用宽度817px。Tkinter的geometry是客户区宽度,但内部控件有padding/边框层层扣减
  2. ERP保存路径列截断显示save_path超40字符显示"..." + save_path[-38:](保留尾部38字符,因为路径末尾的文件名/文件夹名更有意义),配合悬停tooltip显示完整路径
  3. 2px安全边距:列宽总和815px比实测817px少2px,防止不同DPI/主题下边框差异导致水平滚动条出现。stretch=False确保列不被压缩也不被拉伸

验证结果

自动化测试验证(4项全部通过):

测试项预期结果实际结果状态
语法检查6个文件通过py_compile全部通过通过
各Tab列宽总和=815px4个Tab总和815±3pxsync/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最小窗口下水平滚动条影响体验,考虑为最小窗口单独配置列宽方案