【问题标题】:Embedding matplotlib inside Qt ActiveX component在 Qt ActiveX 组件中嵌入 matplotlib
【发布时间】:2015-12-23 17:24:46
【问题描述】:

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

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

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

应用程序已请求运行时以不寻常的方式终止它。请联系应用程序的支持团队了解更多信息。

更糟糕的是,我无法运行调试构建,因为 libpython 的调试构建需要构建所有已编译扩展模块依赖项的调试构建,而我在构建 numpy 时没有任何运气/scipy 从头开始​​。

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

【问题讨论】:

    标签: python qt matplotlib pyqt activex


    【解决方案1】:

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

    来自Qt docs

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

    TEMPLATE = lib
    QT += axserver
    CONFIG  += dll
    
    DEF_FILE = qaxserver.def
    RC_FILE  = qaxserver.rc
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2011-02-04
      • 2012-04-23
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多