Ich mache eine Qt Quick GUI-Anwendung (für Windows), die OpenGL und C++ für einige rechenintensive Sachen verwendet. Ich möchte Python-Code in die App einbetten, um Dinge zu tun, die in Python vergleichsweise einfacher sind.Einbetten von Python 3.4 in C++ Qt-Anwendung?
Grundsätzlich möchte ich nur die C++ - Code eine Funktion in einem Python-Skript aufrufen und lassen Sie das Skript den Job erledigen, dann speichern Sie die zurückgegebenen Daten in einer Variablen (String oder Float etc.) für die weitere Verwendung. Ich benutze Qt Creator, und ich habe Python3 Lib für MinGW Compiler. Ich habe versucht, etwas Code, aber es sieht aus wie python lib ist nicht ganz kompatibel mit Qt Creator. IS pyqt dafür verwenden wird eine gute Idee sein? Was wird der beste und einfachste Weg sein, dies zu tun?
EDIT: Dies ist der grundlegende Code, den ich ausprobiert habe, zuerst gab es mir einen Fehler, der sagt, kann pyconfig.h nicht finden. Dann habe ich einen INCUDEPATH zu meinem python34 include-Verzeichnis hinzugefügt.
#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();
}
My .proDatei:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = TestWidgetApp
TEMPLATE = app
INCLUDEPATH += C:/boost_1_57_0
INCLUDEPATH += C:/Python34/include
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
OTHER_FILES +=
Dann folgende Fehler:
C: \ Python34 \ include \ object.h: 435: Fehler: C2059: Syntaxfehler: ‚; "
C: \ Python34 \ include \ Objekt.h: 435: Fehler: C2238: Unerwarteter (n) Token vor ';'
C: \ Benutzer \ Amol \ Desktop \ TestWidgetApp \ main.cpp: 19: Fehler: C3861: 'PyString_FromString': Bezeichner nicht
gefunden
Können Sie den Code, den Sie ausprobiert haben, anzeigen und erklären, warum er nicht funktioniert hat? – user3419537
Meiner Meinung nach wäre es viel einfacher, die App in PyQt + PyOpenGL zu erstellen und bei Bedarf die Berechnung in einem C++ Modul durchzuführen. PyQt und PyOpenGL sind Wrapper um C++ - Code und werden daher nicht verlangsamt. Und wenn Ihre Berechnungen gemeinsame Routinen verwenden (z. B. lineare Approximation, Matrixmultiplikation usw.), die auch in C++ geschriebene Python-Bibliotheken enthalten, können Sie den gesamten C++ - Teil überspringen. – Fenikso
RTFM [Einbetten von Python in eine andere Anwendung] (https://docs.python.org/3/extending/embbedding.html) –