我正在编写一个python tkinter应用程序,该应用程序与我也在写的C ++库接口。 C ++库包含一个包装一些GLUT功能的类。
我的主要功能(python)看起来像这样:
import sys
import tkinter as tk
import myCustomCppLibrary
#This sets up the GLUT bindings.
myCustomCppLibrary.Initialize()
root = tk.Tk()
# ... some stuff
#Something in mainloop() eventually calls glutMainLoop()
root.mainloop()
myCustomCppLibrary.Finalize()
sys.exit(0)
不幸的是,glutMainLoop
阻止了root.mainloop()
,这意味着我的tkinter GUI在启动GLUT窗口后就无法正常工作。
我确实尝试将std::thread
对象添加到包装类中,但是glutMainLoop
似乎在退出后退出了整个过程,这意味着在线程中运行它不利于干净退出。 / p>
我当时以为我可以使用GLUT的atexit
向tkinter发出信号,它需要关闭并加入线程,但是理想情况下,当我关闭GLUT窗口时该过程不会结束(我不认为这都会给出一个干净的出口)。
是否可以使这两个循环并发运行,并且干净利落?
我想避免修改GLUT的源代码。
答案 0 :(得分:2)
您不能将GLUT与其他窗口框架混合使用。至少并非没有很多痛苦。但是人们不得不怀疑:您必须 使用它的GLUT中有什么?通过一些额外的模块,您可以在TkInter Tkinter OpenGL context in Python
中创建一个OpenGL上下文。