Uso Tkinter per creare una finestra GUI e selezionare un file. Il codice che uso è la seguente:NSException con Tkinter su mac
Tk().withdraw()
file = askopenfilenames(title='Chose transition file')
Quando eseguo questo da solo, sia in Windows e OSX, funziona. Tuttavia, ho bisogno che faccia parte di uno script più grande che può essere trovato in this link (righe 88-89). Questo script viene eseguito correttamente in più un sistema operativo Windows, ma quando l'eseguo in OSX, ottengo il seguente errore:
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
Il codice funziona benissimo in OSX se io commento le righe di codice Tkinter.
Potrebbe per favore dirmi cosa devo fare per superare questo?
Questo è un bit di codice dispari (righe 88-89). Per uno, non si salva un riferimento a 'Tk()', e non si avvia mai il ciclo degli eventi. Hai considerato di spostare quel codice su una funzione, salvare un riferimento temporaneo alla finestra di root ed eseguire il ciclo degli eventi? –
@BryanOakley, grazie per il tuo commento. Potresti postare un link ad un esempio che fa ciò che proponi? Non sono affatto esperto in Tkinter –