ubuntu环境下QT+python混合编程

本文介绍了在Ubuntu 16.04环境下,使用QT 5.8.0和Python 3.5进行混合编程的方法。主要内容包括通过Py_Initialize传递参数遇到的问题和解决方案,以及使用QProcess直接调用Python脚本的两种方式(start和execute)。在Py_Initialize方法中,由于参数传递导致的程序崩溃,作者最终选择了QProcess调用Python脚本,并解决了输出获取为空的问题,通过添加`python -i`参数强制输出提示。
摘要由CSDN通过智能技术生成

最近一个在做一个项目,框架全是用qt搭建的,但是里面有个功能需要调用一下之前写的python脚本。

具体环境:ubuntu16.04   

                  python3.5(网上好多资料是关于python2.0的,存在一些区别)   

                  qt5.8.0

尝试了以下几种办法,踩了很多坑,记录一下。、

 1. Py_Initialize实现参数传递

因为需要向python脚本内传递参数,查阅之后发现可以在QT内导入python包,然后通过Py_Initialize这种方法实现参数传递。

具体操作:

1) 在.pro文件中导入python库(找到自己虚拟机内python的安装路径)

INCLUDEPATH += -I /usr/include/python3.5/

LIBS += -L /usr/lib/python3.5/config-3.5m-x86_64-linux-gnu -lpython3.5

2)由于QT中定义了slots作为关键了,而python3中有使用slot作为变量,所以在编译时会有冲突。

需要修改python库中的object.h文件,因为该文件是系统文件,可以在终端中sudo gedit进行修改: 

sudo gedit /usr/include/python3.5/object.h
//应该是在440-448行
typedef struct{     

      const char* name;     

      int basicsize;    

       int itemsize;     

      unsigned int flags;

      #undef slots     //这里取消slots宏定义

       PyType_Slot *slots;  /* terminated by slot==0. */

      #define slots Q_SLOTS  //这里恢复slots宏定义与QT中QObjectDefs.h中一致

  } PyType_Spec; 

3)测试代码如下,我的需求就是,传入一个字符串,然后返回一个脚本处理过后的字符串

#test.py
def testpy(a):
  b = a+
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值