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

列宽持久化+悬停提示+窗口位置记忆+ERP窗体底色修复

新功能+优化v4.0.9

需求描述

  1. 凭据管理、数据同步任务、ERP报表导出等所有列表区域设计固定宽度规则,长文本列超出显示省略,增加鼠标悬停显示全部信息
  2. 支持人工拖动列宽调整,关闭软件时自动保存列宽和窗口位置,下次打开恢复
  3. ERP报表任务状态:就绪黑色、运行中蓝色、完成绿色(与数据同步任务一致)
  4. ERP编辑导出任务窗体右侧白色底色与左侧灰色不统一,缩减窗体宽度至灰底区域

改动文件清单

文件改动内容
utils/ui_layout.py新增:UI布局持久化工具模块,含列宽存储、窗口位置存储、Treeview鼠标悬停提示(TreeviewTooltip)、一键配置(setup_treeview)
utils/__init__.py新增:utils包初始化
tabs/credentials_tab.pyimport setup_treeview;凭据列表应用列宽持久化+悬停提示+拖动保存
tabs/sync_tasks_tab.pyimport setup_treeview;同步任务列表应用列宽持久化+悬停提示+拖动保存
tabs/erp_report_tab.pyimport setup_treeview;ERP任务列表应用列宽持久化+悬停提示+拖动保存;编辑窗体宽度580→540缩减+dialog bg=white统一底色
tabs/log_center_tab.pyimport setup_treeview;日志列表应用列宽持久化+悬停提示+拖动保存
gui_sync.pyimport ui_layout;主窗口启动时恢复保存的geometry;关闭时保存geometry到config/ui_layout.json;版本号4.0.8→4.0.9

技术要点

  1. 列宽持久化:用户拖动列边框后(<ButtonRelease-1>事件),延迟1秒自动保存到 config/ui_layout.json,避免拖动过程中频繁IO;启动时优先用已保存列宽,无则用默认值
  2. 鼠标悬停提示TreeviewTooltip 类监听<Motion>事件,用tkfont.Font.measure()测量文本像素宽度,超过列宽(减6px padding)时延迟400ms显示浅黄色tooltip;<Leave>时隐藏
  3. Treeview省略号说明:tkinter Treeview原生不支持省略号"…"显示,采用"截断+悬停tooltip"等效方案,鼠标悬停即可查看完整内容
  4. 窗口位置记忆:主窗口启动时优先get_window_geometry()恢复上次位置,关闭时save_window_geometry()保存;geometry字符串格式"WxH+X+Y"
  5. ERP状态颜色:就绪无tag(默认黑色)、执行中=蓝#0066cc、完成=绿#009900、失败=红#cc0000(v4.0.8已实现,v4.0.9确认就绪无tag)
  6. ERP编辑窗体底色修复:dialog宽度580→540缩减消除右侧白色多余区,dialog.configure(bg="white")统一背景,create_window width=dlg_w-30=510

验证结果

  • 语法检查:7个文件(含2个新增)全部通过 py_compile
  • 代码审查:4个Tab的setup_treeview调用、主窗口geometry持久化、ERP窗体底色修复均验证存在

踩坑与解决

  • Treeview不原生支持省略号:tkinter Treeview渲染由Tcl/Tk底层处理,无法自定义省略号显示。改用"截断+tooltip"方案,用户悬停即可查看完整内容,体验等效
  • tkfont导入TreeviewTooltip中用from tkinter import font as tkfont,避免与变量名font冲突