我编写了一个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
我不明白这个错误意味着什么,任何人都可以帮助我理解我做错了什么?
答案 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