将python 3.4嵌入C++;Qt应用程序? 我正在制作一个Qt快速GUI应用程序(Windows),它使用OpenGL和C++来计算一些密集的东西。我想将python代码嵌入到应用程序中,以便在python中做一些相对容易的事情 基本上,我只希望C++代码调用Python脚本中的函数,让脚本执行任务,然后将返回的数据存储在变量(字符串或浮点等)中,以供进一步使用。我正在使用QtCreator,我得到了用于MinGW编译器的python3库。我尝试了一些代码,但看起来python库与Qt creator不太兼容。为此使用pyqt是一个好主意吗?做这件事最好最简单的方法是什么

将python 3.4嵌入C++;Qt应用程序? 我正在制作一个Qt快速GUI应用程序(Windows),它使用OpenGL和C++来计算一些密集的东西。我想将python代码嵌入到应用程序中,以便在python中做一些相对容易的事情 基本上,我只希望C++代码调用Python脚本中的函数,让脚本执行任务,然后将返回的数据存储在变量(字符串或浮点等)中,以供进一步使用。我正在使用QtCreator,我得到了用于MinGW编译器的python3库。我尝试了一些代码,但看起来python库与Qt creator不太兼容。为此使用pyqt是一个好主意吗?做这件事最好最简单的方法是什么,python,c++,qt,opengl,pyqt,Python,C++,Qt,Opengl,Pyqt,编辑:这是我尝试的基本代码,首先它给了我一个错误,说找不到pyconfig.h。然后,我在python34 include目录中添加了一个INCUDEPATH #include "mainwindow.h" #include <QApplication> #include <boost/python.hpp> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindo

编辑:这是我尝试的基本代码,首先它给了我一个错误,说找不到pyconfig.h。然后,我在python34 include目录中添加了一个INCUDEPATH

#include "mainwindow.h"
#include <QApplication>
#include <boost/python.hpp>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    using namespace boost::python;

    PyObject *pName, *pModule, *pDict, *pFunc, *pValue;

        Py_Initialize();

        pName = PyString_FromString(argv[1]);

        pModule = PyImport_Import(pName);


        pDict = PyModule_GetDict(pModule);


        pFunc = PyDict_GetItemString(pDict, argv[2]);

        if (PyCallable_Check(pFunc))
        {
            PyObject_CallObject(pFunc, NULL);
        } else
        {
            PyErr_Print();
        }

        // Clean up
        Py_DECREF(pModule);
        Py_DECREF(pName);

        Py_Finalize();

    return a.exec();
}
然后出现以下错误:

C:\Python34\include\object.h:435:错误:C2059:语法错误:';'

C:\Python34\include\object.h:435:错误:C2238:在“;”之前的意外标记


C:\Users\Amol\Desktop\TestWidgetApp\main.cpp:19:错误:C3861:'PyString_FromString':找不到标识符

我已从示例中删除了所有Qt代码,然后尝试编译它(Qt与编译错误无关)。它为我编译。不同之处在于我使用了Python 2.7中的include文件

因此,我在文件夹中搜索了字符串
PyString\u FromString
C:\Python33\includes
(我注意到您使用的是python 3.4而不是3.3,但我怀疑这是一个3.x的东西)和
C:\Python27\includes

结果:

Python 3.3

Python 2.7


显然,Boostython版本不支持Python 3.4。

Python3没有
PyString\u FromString
函数。Python3
str
type内部是具有复杂结构的unicode对象


使用
PyUnicode\u FromString
PyUnicode\u FromStringAndSize
UTF-8
encoded
C
字符串(
char*
)构造
str
对象。

这里的问题是Python 3.4有一个名为“slots”的结构成员(file object.h,在
PyType\u规范的typedef中),Qt从你下面定义了什么,这样你就可以说:

public slots:
在你的代码中。解决方案是添加:

#undef slots
在包含Python.h之前,以及在以Qt的方式包含任何使用“slot”的内容之前重新定义它:

#undef slots
#include <Python.h>
#define slots

#include "myinclude.h"
#include <QString>
#未定义插槽
#包括
#定义插槽
#包括“myinclude.h”
#包括
有点麻烦(因为您依赖于Qt中
插槽的特定定义),但它应该可以让您继续。

移动您的

#include "boost/python.hpp" 
…在你的另一半之前,它将解决你的问题


实际问题是Scott Deerwester在他的回答中描述的。

你能显示你尝试的代码并解释它为什么不起作用吗?在我看来,在PyQT+PyopGnl中构建应用程序要容易得多,如果需要的话,可以在C++模块中进行计算。Pyqt和PyOpenGL是围绕C++代码的包装器,所以它不会慢下来。如果你的计算使用了普通的例程(例如线性近似、矩阵乘法等),也有用C++编写的Python库,你可以跳过整个C++部分。RTFMK OK,我编辑并添加了我尝试的代码,你们现在可以删除这个保存吗?另外,我应该将包含乘法函数的py文件放在哪里?(代码基于以下文章:)它仍然给了我以下两个错误:C:\Python34\include\object.h:435:error:C2059:syntax error:';'
C:\Python34\include\object.h:435:错误:C2238:在“;”之前的意外标记您确定在编译工具集中使用了正确的python版本吗?像
bjam目标操作系统=windows/python=3.4
?或者至少定义
PY_MAJOR_VERSION=3
PY_MINOR_VERSION=4
#include "boost/python.hpp"