在 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
...
我正在尝试在 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 ...