简体   繁体   English

在Mac上使用Tkinter的NSException

[英]NSException with Tkinter on mac

I use Tkinter to create a GUI window and select a file. 我使用Tkinter创建一个GUI窗口并选择一个文件。 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. 当我在Windows和OSX中单独运行时,它会运行。 However, I need it to be a part of a larger script which can be found in this link (lines 88-89). 但是,我需要将它作为更大脚本的一部分,可以在此链接中找到(第88-89行)。 This larger script runs correctly in a windows OS, but when I run it in an OSX, I get the following error: 这个更大的脚本在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

The code runs fine in OSX if I comment out the Tkinter code lines. 如果我注释掉Tkinter代码行,代码在OSX中运行正常。

Could you please tell me what should I do to overcome this? 你能告诉我怎么办才能克服这个问题?

Follow the answer in this question 按照这个问题的答案

There is a known issue with TK and IDLE on OSX because: 在OSX上存在TK和IDLE的已知问题,因为:

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. Python的集成开发环境IDLE和它使用的tkinter GUI工具包依赖于Tk GUI工具包,它不是Python本身的一部分。 For best results, it is important that the proper release of Tcl/Tk is installed on your machine. 为获得最佳效果,必须在机器上安装正确的Tcl / Tk释放装置。

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. 如果您在Mac OS X 10.6及更高版本的python.org 64位/ 32位Python安装程序中使用Python,则只应使用IDLE或tkinter和更新的第三方Tcl / Tk 8.5(不是8.6),如已安装ActiveTcl 8.5。

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. 如果您使用的是Mac OS X 10.6,请不要在Mac OS X 10.6中使用Apple提供的Python 2.6.1中的IDLE或Tkinter。 If possible, install and use a newer version of Python and of Tcl/Tk. 如果可能,请安装并使用较新版本的Python和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. 如果您使用的是Mac OS X 10.7或更高版本,Apple提供的Tcl / Tk 8.5仍然存在严重的错误,可能导致应用程序崩溃。 If you wish to use IDLE or Tkinter, install and use a newer version of Python and of Tcl/Tk. 如果您希望使用IDLE或Tkinter,请安装并使用较新版本的Python和Tcl / Tk。

This link ( https://www.python.org/download/mac/tcltk/ ) maybe help you. 此链接( https://www.python.org/download/mac/tcltk/ )可能对您有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM