我可以允许tkinter的mainloop()和GLUT的glutMainLoop()同时运行吗?

时间:2020-07-27 23:56:18

标签: python c++ opengl tkinter glut

我正在编写一个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的源代码。

1 个答案:

答案 0 :(得分:2)

您不能将GLUT与其他窗口框架混合使用。至少并非没有很多痛苦。但是人们不得不怀疑:您必须 使用它的GLUT中有什么?通过一些额外的模块,您可以在TkInter Tkinter OpenGL context in Python

中创建一个OpenGL上下文。