Python mac上带有Tkinter的N异常
我使用Tkinter创建一个GUI窗口并选择一个文件。我使用的代码如下所示:Python mac上带有Tkinter的N异常,python,macos,tkinter,Python,Macos,Tkinter,我使用Tkinter创建一个GUI窗口并选择一个文件。我使用的代码如下所示: Tk().withdraw() file = askopenfilenames(title='Chose transition file') 当我在Windows和OSX中单独运行时,它会运行。然而,我需要它是一个更大的脚本的一部分,可以在(第88-89行)中找到。此较大的脚本在windows操作系统中正确运行,但在OSX中运行时,出现以下错误: Last login: Thu Apr 30 17:45:40 on
Tk().withdraw()
file = askopenfilenames(title='Chose transition file')
当我在Windows和OSX中单独运行时,它会运行。然而,我需要它是一个更大的脚本的一部分,可以在(第88-89行)中找到。此较大的脚本在windows操作系统中正确运行,但在OSX中运行时,出现以下错误:
Last login: Thu Apr 30 17:45:40 on ttys000
/Users/nueye/Desktop/plaidtomac/PyInstaller-2.1/Plaid/dist/Plaid ; exit;
MyMacBookPro15:~ nueye$ /Users/nueye/Desktop/plaidtomac/PyInstaller-2.1/Plaid/dist/Plaid ; exit;
running Plaid
2015-04-30 17:46:15.367 Plaid[526:903] -[NSApplication _setup:]: unrecognized selector sent to instance 0x101d41340
2015-04-30 17:46:15.368 Plaid[526:903] An uncaught exception was raised
2015-04-30 17:46:15.369 Plaid[526:903] -[NSApplication _setup:]: unrecognized selector sent to instance 0x101d41340
2015-04-30 17:46:15.370 Plaid[526:903] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x101d41340'
*** Call stack at first throw:
(
0 CoreFoundation 0x00007fff8685b7b4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x00007fff84e2c0f3 objc_exception_throw + 45
2 CoreFoundation 0x00007fff868b5110 +[NSObject(NSObject) doesNotRecognizeSelector:] + 0
3 CoreFoundation 0x00007fff8682d91f ___forwarding___ + 751
4 CoreFoundation 0x00007fff86829a68 _CF_forwarding_prep_0 + 232
5 Tk 0x0000000117b0cb24 TkpInit + 545
6 Tk 0x0000000117a829ee Initialize + 1648
7 _tkinter.so 0x0000000103b2ac0d Tcl_AppInit + 77
8 _tkinter.so 0x0000000103b29657 Tkinter_Create + 919
9 Python 0x00000001002bffad PyEval_EvalFrameEx + 21405
10 Python 0x00000001002c1fb3 PyEval_EvalCodeEx + 2115
11 Python 0x000000010023bac0 function_call + 176
12 Python 0x0000000100209eb2 PyObject_Call + 98
13 Python 0x000000010021c56d instancemethod_call + 365
14 Python 0x0000000100209eb2 PyObject_Call + 98
15 Python 0x00000001002b9957 PyEval_CallObjectWithKeywords + 87
16 Python 0x000000010021f85e PyInstance_New + 126
17 Python 0x0000000100209eb2 PyObject_Call + 98
18 Python 0x00000001002bdc60 PyEval_EvalFrameEx + 12368
19 Python 0x00000001002c1fb3 PyEval_EvalCodeEx + 2115
20 Python 0x00000001002c03f0 PyEval_EvalFrameEx + 22496
21 Python 0x00000001002c1fb3 PyEval_EvalCodeEx + 2115
22 Python 0x00000001002c20d6 PyEval_EvalCode + 54
23 Python 0x00000001002e7237 PyRun_StringFlags + 279
24 Python 0x00000001002e7321 PyRun_SimpleStringFlags + 65
25 Plaid 0x0000000157e1beac 0x0 + 5769379500
26 Plaid 0x0000000157e2fcb8 0x0 + 5769460920
27 Plaid 0x0000000157e1b7f4 0x0 + 5769377780
)
terminate called after throwing an instance of 'NSException'
Abort trap
logout
如果我注释掉Tkinter代码行,代码在OSX中运行良好
你能告诉我该怎么做才能克服这个问题吗?请按照下面的答案进行操作
OSX上的TK和IDLE存在已知问题,因为:
Python的集成开发环境IDLE及其使用的tkintergui工具包依赖于tkgui工具包,而tkgui工具包不是Python本身的一部分。为了获得最佳效果,必须在您的机器上安装正确版本的Tcl/Tk
详情如下:
如果您是从Python.org 64位/32位Python安装程序(适用于Mac OS X 10.6及更高版本)使用Python,则应仅使用IDLE或tkinter,并安装更新的第三方Tcl/Tk 8.5(而不是8.6),如ActiveTcl 8.5
如果您使用的是Mac OS X 10.6,请不要在Mac OS X 10.6中使用苹果提供的Python 2.6.1中的IDLE或Tkinter。如果可能,请安装并使用更新版本的Python和Tcl/Tk
如果您使用的是Mac OS X 10.7或更高版本,则苹果提供的Tcl/Tk 8.5仍然存在严重的漏洞,可能导致应用程序崩溃。如果您希望使用IDLE或Tkinter,请安装并使用更新版本的Python和Tcl/Tk
此链接()可能对您有所帮助。这是一段奇怪的代码(第88-89行)。首先,您不保存对
Tk()
的引用,也不启动事件循环。您是否考虑过将该代码移动到函数、保存对根窗口的临时引用并运行事件循环?@BryanOakley,谢谢您的评论。你能不能发一个链接到一些你所建议的例子?我在Tkinter一点经验都没有。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@谢谢你提醒我,我是新手。我更新了答案