在Qt ActiveX组件中嵌入matplotlib

时间:2015-12-23 17:24:46

标签: python qt matplotlib pyqt activex

我尝试在Windows 7上使用Active Qt在ActiveX组件中嵌入一些matplotlib数字,这些数字已成功嵌入常规Qt项目中的matplotlib个数字。

使用Qt文档中的SimpleMenus示例作为参考,我设法在ActiveX组件中嵌入Python解释器并运行构建QWidget的一些基本Python代码使用PyQt5的对象。

一切正常,我可以使用PyQt构建ActiveX组件接口的一部分,并在使用Python和c ++等创建的小部件之间发送信号,没有任何问题。我甚至可以使用FigureCanvas后端创建matplotlib PyQt5对象。但是,只要我尝试嵌入一个已添加了子图的FigureCanvas,我的ActiveX组件就会崩溃,并出现一般的Visual C ++运行时错误:

  

应用程序已请求Runtime以不正常的方式终止它。请联系应用程序的支持团队以获取更多信息。

更糟糕的是,我无法运行调试版本,因为libpython的调试版本需要构建所有编译的扩展模块依赖项的调试版本,而且我还没有运气好从头开始构建numpy / scipy

有没有人对可能导致此次崩溃的原因有任何想法?我想知道它是否与COM对象或Python GIL使用的线程模型有关,但我对这些主题知之甚少。欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

问题解决了。我以下的示例创建了一个进程外的ActiveX服务器。切换到进程内服务器可以停止崩溃。

来自Qt docs

  

要构建进程内服务器,请使用如下的.pro文件:

TEMPLATE = lib
QT += axserver
CONFIG  += dll

DEF_FILE = qaxserver.def
RC_FILE  = qaxserver.rc
...