我继承了一些使用kivy / tkinter / matplotlib的代码,这些代码在windows上运行正常但在osx上有一些问题。已经解决了一个问题in another question。当我运行以下内容时,我得到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(),然后说一切正常......当代码继续后,异常不会发生,一切都运行得很好。
所以我的问题是,这些NSExceptions的根和性质通常是什么,以及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
答案 0 :(得分:0)
所以我觉得很傻,原因很简单,_test()创建了一个根窗口,而大解决方案只是在导入后创建一个根窗口:
import tkinter
root = tkinter.Tk()
root.withdraw()