小能豆

关于python:kivy中matplotlib和tkinter中的NSException

py

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

阅读 68

收藏
2025-02-21

共1个答案

小能豆

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

import tkinter
root = tkinter.Tk()
root.withdraw()
2025-02-21