飞书多维表同步工具2026-07-09v4.0.7
弹窗打开时左上角闪烁再移动到中间
bug修复v4.0.7
需求描述
用户反馈所有弹窗在点击打开时都会在屏幕左上角闪烁一下,然后再移动到屏幕中间,影响体验。
根因分析
tk.Toplevel 创建时窗口立即在默认位置(0,0)左上角显示,随后 update_idletasks() 触发渲染让窗口在左上角可见,最后 geometry() 才将窗口移动到屏幕中间——用户就看到"左上角闪烁一下再移动"的现象。
修复方案
创建 Toplevel 后立即 withdraw() 隐藏窗口,设置好 geometry 位置后再 deiconify() 显示。这样窗口在显示前就已经设置好正确位置,不会出现闪烁。
改动文件清单
| 文件 | 改动内容 |
|---|---|
gui_sync.py | ActivationDialog、PairingDialog、DeleteSelectDialog、splash root 共4处弹窗加 withdraw/deiconify |
tabs/sync_tasks_tab.py | _show_task_dialog 编辑同步任务弹窗加 withdraw/deiconify |
tabs/erp_report_tab.py | _show_export_name_manager 管理弹窗、_show_task_dialog 编辑任务弹窗共2处加 withdraw/deiconify |
gui_sync.py | 版本号 4.0.6 → 4.0.7 |
技术要点
- withdraw():隐藏窗口使其不可见,但窗口控件仍可正常布局和计算尺寸
- deiconify():恢复窗口显示,此时 geometry 已设置好正确位置,直接在目标位置显示
- 修改模式:
Toplevel创建 → withdraw() → 设置内容 → update_idletasks() → geometry(居中) → deiconify() - 共修复7处弹窗(14个 withdraw/deiconify 调用点)
踩坑与解决
- 并行 Edit 冲突:首次修改时3处(ActivationDialog、PairingDialog withdraw、DeleteSelectDialog _center_window deiconify)因并行 Edit 被覆盖丢失,改为逐个修改后全部成功。教训:对同一文件的多个 Edit 不要并行执行,应串行处理。
验证结果
- 语法检查:3个文件全部通过
py_compile - 代码审查:14处 v4.0.7 标记(7对 withdraw+deiconify)全部验证存在