在Qt GUI中嵌入图形

2 投票
2 回答
1319 浏览
提问于 2025-04-15 14:10

你怎么把一个vpython的动画图嵌入到你的Qt图形界面里呢?这样它就可以有自己的显示区域,不用再单独打开一个新窗口了。

2 个回答

1

我联系了VPython的维护者,他确认他不知道有什么方法可以把Visual嵌入到QT窗口里。

所以我决定试试VTK,到目前为止我觉得挺满意的,在PyQT框架中使用VTK没有遇到任何问题。

3

vpython的常见问题解答中提到,vpython的架构让嵌入其他环境变得很麻烦……:

问:有没有办法把VPython嵌入到其他环境中?

这很困难,因为VPython有两个线程,一个是计算线程,另一个是渲染线程,每秒大约会绘制场景25次,使用当前图形对象的属性。不过,Stef Mientki成功地把VPython嵌入到了Windows的wxPython窗口中;具体可以查看贡献部分。

所以,如果用wxPython的话,需要付出很大的努力(“成功地”听起来可不是件简单的事;-) 而且只在一个平台上有效,我担心用Qt会更难……在每个平台上都得单独面对这个艰巨的挑战。

如果你准备好接受一个严峻的挑战,对vpython非常熟悉,对Qt有一定了解,并且对你关心的所有平台的底层窗口架构也有些了解(还要对wxPython有点了解),那么可以从Mientki的精彩贡献开始。他实际上是在wxPython的抽象层之下工作,涉及到win32gui调用、win32con常量,还有“一个由wx.Timer以100毫秒为周期的有限状态机”(虽然他承认这个“拼凑”的结果并不是……“完美的”;-)。类似的方法在Windows的其他框架上(包括Qt)也应该能用(虽然结果同样“不是完美的”)。

不过,目前还没有人把这个移植到Mac OS X,也没有移植到Linux和Unix类架构上流行的许多窗口管理器(我不确定这个壮举是否能仅在xlib层面实现——窗口装饰方面似乎是涉及到的,而在X11世界中,这些确实需要窗口管理器的配合)。

所以,直接回答你的问题就是,“需要大量的工作,要求很多技能和/或惊人的毅力,而且可能是平台依赖的方式,需要在每一个感兴趣的平台上重新做一遍”……抱歉带来这样的坏消息,但我更喜欢直言不讳。

撰写回答