**问题遇到的现象和发生背景 **
Qt 5.15.2 + Python 3.8
使用Python/C API实现C++和Python间的交互
问题相关代码
Main.cpp:
#include <Python.h>
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
//show the UI
w.show();
return a.exec();
}
MainWindow.cpp:
#include <Python.h>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAction>
#include <QPushButton>
#include <QLineEdit>
#include <QByteArray>
#include <QLabel>
#include <QString>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//num init
char *num1, *num2;
//Python config
//Python init
Py_Initialize(); //init the python interpreter
if(!Py_IsInitialized()) //succeed or not
{
qDebug() << "Python init failed.";
}
//add path into sys
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.insert(0,'.')");
//PyObject_init
PyObject *module; // module and func
module = PyImport_ImportModule("MathPy"); //import module
//Menubar -> exit
connect(ui->actionexit,&QAction::triggered,this,[=](){
Py_Finalize();
this->close();
});
//num -> change
connect(ui->EditNum1,&QLineEdit::textChanged,this,[&](){
num1 = ui->EditNum1->text().toUtf8().data();
});
connect(ui->EditNum2,&QLineEdit::textChanged,this,[&](){
num1 = ui->EditNum2->text().toUtf8().data();
});
//six buttons
connect(ui->ButtonPlus,&QPushButton::clicked,this,[&](){
PyObject *func = PyObject_GetAttrString(module,"plus");
PyObject *result = PyObject_CallFunction(func,num1,num2);
int res = PyLong_AsLong(result);
ui->LabelResult->setText(QString(res));
});
connect(ui->ButtonSub,&QPushButton::clicked,this,[&](){
PyObject *func = PyObject_GetAttrString(module,"sub");
PyObject *result = PyObject_CallFunction(func,num1,num2);
int res = PyLong_AsLong(result);
ui->LabelResult->setText(QString(res));
});
connect(ui->ButtonMulti,&QPushButton::clicked,this,[&](){
PyObject *func = PyObject_GetAttrString(module,"multi");
PyObject *result = PyObject_CallFunction(func,num1,num2);
int res = PyLong_AsLong(result);
ui->LabelResult->setText(QString(res));
});
connect(ui->ButtonDiv,&QPushButton::clicked,this,[&](){
PyObject *func = PyObject_GetAttrString(module,"div");
PyObject *result = PyObject_CallFunction(func,num1,num2);
int res = PyLong_AsLong(result);
ui->LabelResult->setText(QString(res));
});
connect(ui->ButtonMax,&QPushButton::clicked,this,[&](){
PyObject *func = PyObject_GetAttrString(module,"max");
PyObject *result = PyObject_CallFunction(func,num1,num2);
int res = PyLong_AsLong(result);
ui->LabelResult->setText(QString(res));
});
connect(ui->ButtonMin,&QPushButton::clicked,this,[&](){
PyObject *func = PyObject_GetAttrString(module,"min");
PyObject *result = PyObject_CallFunction(func,num1,num2);
int res = PyLong_AsLong(result);
ui->LabelResult->setText(QString(res));
});
}
MainWindow::~MainWindow()
{
delete ui;
}
MathPy.py
def plus(num1,num2):
return num1+num2
def sub(num1,num2):
return num1-num2
def multi(num1,num2):
return num1*num2
def div(num1,num2):
return num1/num2
def max(num1,num2):
if num1>num2:
return num1
else:
return num2
def min(num1,num2):
if num1>num2:
return num2
else:
return num1
ui有两个QLineEdit,分别输入两个数字,6个QPushButton分别对应MathPy.py中的六个函数,一个QLabel显示结果
运行结果及报错内容
程序可以运行
但是点击按钮的的时候,会在应用程序输出栏输出电脑上某输入法的路径(莫名其妙),然后程序crash
** 我的解答思路和尝试过的方法 **
不知道为什么会出现这种错误,无从下手
我想要达到的结果
程序实现应有功能,正常运行