2015-05-04 38 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:謝謝你提醒我,我是一個新手。我更新了答案 –