使用matplotlib和tkinter在kivy中的NSException

时间:2017-03-08 14:17:22

标签: python tkinter kivy

我继承了一些使用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

1 个答案:

答案 0 :(得分:0)

所以我觉得很傻,原因很简单,_test()创建了一个根窗口,而大解决方案只是在导入后创建一个根窗口:

import tkinter
root = tkinter.Tk()
root.withdraw()