2015-05-04 36 views
8

我使用Tkinter创建一个GUI窗口并选择一个文件。我使用的代码如下:在Mac上使用Tkinter的NSException

Tk().withdraw() 
file = askopenfilenames(title='Chose transition file') 

当我单独运行它,无论是在Windows和OSX,它运行。但是,我需要它是一个更大的脚本的一部分,可以在this link(第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 

的代码运行在OSX的罚款,如果我注释掉Tkinter的代码行。

请问我该怎么做才能克服这个问题?

+2

这是一个奇怪的代码(88-89行)。首先,你不保存对'Tk()'的引用,并且你永远不会启动事件循环。您是否考虑过将该代码移动到一个函数中,保存对根窗口的临时引用并运行事件循环? –

+0

@BryanOakley,谢谢你的评论。你可以发布一个链接给你提出的一些例子吗?我在Tkinter没有经验 –

回答

1

按照this question

的答案有一个与TK和IDLE在OSX上已知的问题,因为:

Python's integrated development environment, IDLE, and the tkinter GUI toolkit it uses, depend on the Tk GUI toolkit which is not part of Python itself. For best results, it is important that the proper release of Tcl/Tk is installed on your machine.

对于细节:

If you are using Python from a python.org 64-bit/32-bit Python installer for Mac OS X 10.6 and later, you should only use IDLE or tkinter with an updated third-party Tcl/Tk 8.5 (not 8.6), like ActiveTcl 8.5 installed.

If you are using Mac OS X 10.6, do not use IDLE or Tkinter from the Apple-supplied Python 2.6.1 in Mac OS X 10.6. If possible, install and use a newer version of Python and of Tcl/Tk.

If you are using Mac OS X 10.7 or later, the Apple-supplied Tcl/Tk 8.5 still has serious bugs that can cause application crashes. If you wish to use IDLE or Tkinter, install and use a newer version of Python and of Tcl/Tk.

此链接(https://www.python.org/download/mac/tcltk/)也许帮助您。

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/17790283) – Oz123

+0

@ Oz123:谢谢你提醒我,我是一个新手。我更新了答案 –