Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSException with Tkinter on mac

I use Tkinter to create a GUI window and select a file. The code I use is the following:

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

When I run this alone, both in Windows and OSX, it runs. However, I need it to be a part of a larger script which can be found in this link (lines 88-89). This larger script runs correctly in a windows OS, but when I run it in an OSX, I get the following error:

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

The code runs fine in OSX if I comment out the Tkinter code lines.

Could you please tell me what should I do to overcome this?

like image 817
jl.da Avatar asked May 04 '15 13:05

jl.da


People also ask

Can you use tkinter on Mac?

If you are using a Python from any current python.org Python installer for macOS (3.10. 0+ or 3.9. 0+), no further action is needed to use IDLE or tkinter. A built-in version of Tcl/Tk 8.6 will be used.


1 Answers

Follow the answer in this question

There is a known issue with TK and IDLE on OSX because:

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.

For detail:

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.

This link (https://www.python.org/download/mac/tcltk/) maybe help you.

like image 96
Huu-Danh Pham Avatar answered Sep 29 '22 05:09

Huu-Danh Pham