在 Qt ActiveX 组件中嵌入 matplotlib

Embedding matplotlib inside Qt ActiveX component

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

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

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

The application has requested the Runtime to terminate it in an unsual way. Please contact the application's support team for more information.

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

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

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

来自Qt docs

To build an in-process server, use a .pro file like this:

TEMPLATE = lib
QT += axserver
CONFIG  += dll

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