我继承了一些使用 kivy/tkinter/matplotlib 的代码,这些代码在 Windows 上运行良好,但在 OSX 上存在一些问题。另一个问题已经解决了一个问题。NSException
当我运行以下命令时,我得到了一个:
import tkinter
# tkinter._test()
import matplotlib
matplotlib.use("TkAgg")
from matplotlib import pyplot as plt
import kivy.core.window
from tkinter.filedialog import askopenfilename
askopenfilename(initialdir='/', title="Open files")
除非我调用 askopenfilename,否则我不会收到异常。现在我在想“也许 tkinter 不工作”,所以我加入了初始的 tkinter._test(),然后它说一切正常……当代码继续执行时,不会发生异常,一切都运行正常。
所以我的问题是,这些 NSException 的根源和性质通常是什么,以及 tkinter._test() 可能做了什么导致它不发生?
以及如何复制它的操作而不出现不需要的初始测试弹出窗口?
抛出的异常是:
2017-03-08 15:16:00.199 Python[31489:260345] -[SDLApplication _setup:]: unrecognized selector sent to instance 0x1021727f0
2017-03-08 15:16:00.203 Python[31489:260345] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SDLApplication _setup:]: unrecognized selector sent to instance 0x1021727f0'
*** First throw call stack:
(
0 CoreFoundation 0x00007fffa8716e7b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00007fffbd300cad objc_exception_throw + 48
...
53 Python 0x0000000100000c34 Python + 3124
)
libc++abi.dylib: terminating with uncaught exception of type NSException
所以我觉得很傻,原因很简单,_test() 创建了一个根窗口,而解决办法只是在导入后创建一个根窗口:
import tkinter
root = tkinter.Tk()
root.withdraw()