Mac Ventura系统下Tkinter文件选择窗口无法关闭问题求助
解决Mac Ventura下Tkinter文件选择后残留窗口与Dock图标的问题
问题现象
在Windows上正常运行的Tkinter文件选择脚本,放到Mac Ventura 13.3.1上会出现以下问题:
- 选完文件后,桌面残留一个标题为
tk的空白小窗口 - Dock栏里一直挂着
python3.10的应用图标 - 运行时还会弹出警告:
2023-06-30 11:17:10.566 python[42030:4586512] +[CATransaction synchronize] called within transaction
原代码如下:
from tkinter import * from tkinter import filedialog def get_file(): root = Tk() root.wm_attributes('-topmost', 1) root.withdraw() selected_file = filedialog.askopenfilename(initialdir='', title="File Selection", parent=root) return selected_file print('Select .csv File with Relevant Absorption Spectra') data_path = get_file()
问题原因
MacOS的Tkinter底层实现和Windows存在差异:
- 仅调用
root.withdraw()只是隐藏主窗口,并未终止Tk的主事件循环,导致进程残留,窗口和Dock图标无法自动消失 - 先设置
-topmost属性再隐藏窗口,会触发CATransaction的同步警告
修复方案
修改代码,确保主窗口被彻底销毁并终止Tk主循环,同时调整窗口属性的设置顺序:
from tkinter import * from tkinter import filedialog def get_file(): root = Tk() root.withdraw() # 先隐藏窗口,再设置置顶属性 root.wm_attributes('-topmost', 1) selected_file = filedialog.askopenfilename(initialdir='', title="File Selection", parent=root) # 选完文件后销毁窗口并终止主循环 root.destroy() root.quit() return selected_file print('Select .csv File with Relevant Absorption Spectra') data_path = get_file()
说明
root.destroy()会彻底销毁主窗口及其所有关联资源root.quit()会终止Tk的主事件循环,确保Python进程正常退出- 调整
withdraw()和wm_attributes()的顺序,可避免触发CATransaction警告
内容的提问来源于stack exchange,提问作者blake
相关产品推荐
相关产品推荐

