Abort Trap:使用带有Tkinter和Pyglet的Python脚本时

时间:2014-09-23 14:01:51

标签: python macos user-interface tkinter pyglet

我编写了一个Python脚本,它使用Pyglet作为主窗口,使用Tkinter作为初始GUI窗口。此脚本在Windows上按预期工作,即显示Tkinter GUI窗口和Pyglet动画。但是,它无法在Mac上正常运行,我无法让两个窗口一起工作,它们可以单独工作。

我发现执行行master = Tk()时出现错误,如果已导入以下库

from pyglet.gl import *
from pyglet.window import Window, mouse, key

我用来测试它的完整代码是:

import pyglet
from pyglet.gl import *
from pyglet.window import Window, mouse, key
from Tkinter import * # for the subject data gui

master = Tk()

我从中得到的错误信息如下:

Python[1359:60f] -[NSApplication _setup:]: unrecognized selector sent to instance 0x10300adb0
Python[1359:60f] An uncaught exception was raised
ython[1359:60f] -[NSApplication _setup:]: unrecognized selector sent to instance 0x10300adb0
Python[1359:60f] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x10300adb0'
*** 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                                  0x0000000116cc2b24 TkpInit + 545
    6   Tk                                  0x0000000116c389ee Initialize + 1648
    7   _tkinter.so                         0x0000000116af6c0d Tcl_AppInit + 77
    8   _tkinter.so                         0x0000000116af5657 Tkinter_Create + 919
    9   Python                              0x00000001000c2fad PyEval_EvalFrameEx + 21405
    10  Python                              0x00000001000c4fb3 PyEval_EvalCodeEx + 2115
    11  Python                              0x000000010003eac0 function_call + 176
    12  Python                              0x000000010000ceb2 PyObject_Call + 98
    13  Python                              0x000000010001f56d instancemethod_call + 365
    14  Python                              0x000000010000ceb2 PyObject_Call + 98
    15  Python                              0x00000001000bc957 PyEval_CallObjectWithKeywords + 87
    16  Python                              0x000000010002285e PyInstance_New + 126
    17  Python                              0x000000010000ceb2 PyObject_Call + 98
    18  Python                              0x00000001000c0c60 PyEval_EvalFrameEx + 12368
    19  Python                              0x00000001000c4fb3 PyEval_EvalCodeEx + 2115
    20  Python                              0x00000001000c50d6 PyEval_EvalCode + 54
    21  Python                              0x00000001000e995e PyRun_FileExFlags + 174
    22  Python                              0x00000001000e9bfa PyRun_SimpleFileExFlags + 458
    23  Python                              0x0000000100100c0d Py_Main + 3101
    24  Python                              0x0000000100000f14 0x0 + 4294971156
    25  ???                                 0x0000000000000002 0x0 + 2
)
terminate called after throwing an instance of 'NSException'
Abort trap 

我不明白这个错误意味着什么,任何人都可以帮助我理解我做错了什么?

1 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但我的毕业生一直都会问这个问题。特别是当他们从网络上复制代码时。

您几乎肯定会遇到命名空间冲突。 您正在执行import *或从pyglet导入Window, mouse, key等名称,然后从tkinter执行import *。当同时使用2个图形库时,最好处理完整命名空间的处理,例如,引用诸如pyglet.window.Window之类的东西或别名之类的东西,例如import pyglet.window as pw然后使用{{1 }或pw.Window

您发布的代码为我生成了相同的例外,但此版本完成时没有错误:

pw.mouse

注意:我使用小写# import pyglet # from pyglet.gl import * # from pyglet.window import Window, mouse, key import tkinter # import * # for the subject data gui master = tkinter.Tk() ,因为我使用的是Python 3.6