Tkinter(8.6.7)导致Jupyter内核崩溃,求助排查原因
解决Mac上Jupyter中Tkinter文件对话框导致内核崩溃的问题
我之前在Mac上用老版本Python的conda环境跑Tkinter时也遇到过一模一样的内核崩溃问题,给你几个排查和解决的方向:
1. 先确认问题范围:是Jupyter专属还是Tkinter本身的问题
先别在Jupyter里测试,打开你的conda环境终端,直接运行这段代码:
from tkinter import filedialog from tkinter import * root = Tk() root.filename = filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("jpeg files","*.jpg"),("all files","*.*"))) root.destroy() # 记得手动关闭Tk根窗口释放资源
如果这段代码在终端里能正常运行(选文件或取消都不会崩溃),那问题就出在Jupyter和Tkinter的交互逻辑上;如果终端里也崩溃,那就是你的conda环境中Tkinter与Mac系统的兼容性冲突。
2. 最彻底的解决方案:升级Python版本
Python 3.5.4已经是超老旧的版本了(2020年就停止官方维护),对应的Tkinter 8.6.7很可能和现在的MacOS(比如Ventura、Sonoma)存在严重的适配问题。建议你创建一个新的conda环境,安装Python 3.7及以上的稳定版本(比如3.8或3.9,兼容性最优),再重新安装Tkinter:
conda create -n new_py_env python=3.9 conda activate new_py_env conda install tk
在这个新环境里启动Jupyter再运行代码,大概率能直接解决崩溃问题。
3. Jupyter专属的临时修复
如果暂时不想升级Python,试试在Jupyter Notebook里先执行魔法命令提前初始化Tk的GUI上下文:
%gui tk
执行完这条命令后再运行你的文件选择代码,能避免后续调用对话框时出现资源冲突导致内核崩溃。
4. 绕开Tkinter:替换文件对话框库
如果以上方法都不生效,可以用其他库的文件选择功能避开Tk的坑,比如easygui:
conda install easygui
然后把代码改成:
import easygui filename = easygui.fileopenbox(default="/", title="Select file", filetypes=["*.jpg", "*.*"])
这个库的文件对话框在Mac的Jupyter环境中兼容性通常更好。
内容的提问来源于stack exchange,提问作者Coolio2654
相关产品推荐
相关产品推荐

