繁体   English   中英

带有matplotlib和tkinter的Kivy中的NSException

[英]NSException in kivy with matplotlib and tkinter

我继承了一些使用kivy / tkinter / matplotlib的代码,这些代码在Windows上可以正常运行,但在osx上存在一些问题。 一个问题已经在另一个问题中解决了。 运行以下NSException时出现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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM