Tkinter中的非顶级opengl小部件

cod*_*e11 1 python opengl tkinter

我有一个现有的tkinter gui,我想向其中添加一个openGL小部件。但是,似乎OpenGL窗口小部件仅在顶级时才起作用。

这有效:

from OpenGL.Tk import *
from Tkinter import *
herp=Opengl(height=100,width=100)
herp.pack()
herp.mainloop()
Run Code Online (Sandbox Code Playgroud)

但这不是:

from OpenGL.Tk import *
root=Tk()
b=Opengl(root,height=100,width=100)
b.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

Traceback (most recent call last):
  File "\\sith\user_files\2013-Softerns\new_gui_planning\LearningOpenGL\integration_3.py", line 4, in <module>
    b=Opengl(root,height=100,width=100)
  File "C:\Python27_32bit\lib\site-packages\OpenGL\Tk\__init__.py", line 267, in __init__
    apply(RawOpengl.__init__, (self, master, cnf), kw)
  File "C:\Python27_32bit\lib\site-packages\OpenGL\Tk\__init__.py", line 216, in __init__
    Widget.__init__(self, master, 'togl', cnf, kw)
  File "C:\Python27_32bit\lib\lib-tk\Tkinter.py", line 2036, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
TclError: invalid command name "togl"
Run Code Online (Sandbox Code Playgroud)

我需要导入togl吗?

我唯一可以找到的其他东西是:

http://computer-programming-forum.com/56-python/ece79da9298c54de.htm

但是他们的解决方案对我不起作用。

Obl*_*ion 5

看起来togl的PyOpengl包装器正在使用默认的根窗口。

您应该能够通过您的Opengl小部件的master属性获得对此的引用。

from Tkinter import *
from OpenGL.Tk import *

b=Opengl(height=100,width=100)
root = b.master
f = Frame(root, width=100, bg='blue')
f.pack(side='left', fill='y')
b.pack(side='right', expand=1, fill='both')

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

  • Oblivion,您的解决方案完美无缺!对于处于相同情况的人,如果稍后需要在代码中使用 opengl 小部件,则可以“提取”根目录,然后稍后重新定义 opengl 小部件。奇迹般有效。 (2认同)