Qt 与python之间的通信(一)
来源:互联网 发布:淘宝送的魔豆 编辑:程序博客网 时间:2024/05/21 15:01
自己目前了解的qt和python 通信的两种方法。1:利用python模块进行通讯,2;利用Qt进程,调用python.exe来运行py脚本如下是和Qt正常通讯的步骤: 只要遵守如下步骤,和python通讯准没问题。先就讲解第一种方法://添加python运行的库文件路径 Py_SetPythonHome(python_path.toLocal8Bit().data()); //初始化 Py_Initialize();
if (!Py_IsInitialized()) {
return false;
}
PyObject* pModule = NULL;
PyObject* pFunc = NULL;
PyObject* pParam = NULL;
PyObject* pResult = NULL;
qDebug()<<"****************************";
//导入模块
pModule = PyImport_ImportModule("jar_check");
if (!pModule) {
qDebug()<<"------------------import fail---------------";
}
//调用模块中的函数
pFunc = PyObject_GetAttrString(pModule, "main");
if (!pFunc) {
Py_DECREF(pModule);
return false;
}
//将c语言的数据类型转换成python对象,意思就是给python传入参数(ss)代表的是元组类型的字符串
pParam = Py_BuildValue("(ss)", sdk_path.toLocal8Bit().data(),jar_path.toLocal8Bit().data()); //将参数传递给函数
pResult = PyEval_CallObject(pFunc, pParam);
if (!pResult) {
Py_DECREF(pParam);
Py_DECREF(pFunc);
Py_DECREF(pModule);
return false;
}
int code=-1; //一下是将python返回的数据转换成c的格式。
if (!PyArg_Parse(pResult, "i", &code)) {
Py_DECREF(pParam);
Py_DECREF(pResult);
Py_DECREF(pFunc);
Py_DECREF(pModule);
return false;
}
Py_DECREF(pParam);
Py_DECREF(pResult);
Py_DECREF(pFunc);
Py_DECREF(pModule); //结束
Py_Finalize();可能,有的人按照如下步骤走:还是会报错:请仔细看:1:工程文件的配置:加上这两句.INCLUDEPATH += \-I C:\Python27\includeLIBS += \-L C:\Python27\libs -lpython272:在python->lib->site-packages 目录下添加一个*.pth的文件。以pth结尾的。比如path.pth.在里面添加python脚本所要运行的脚本路径;举个例子: import sys sys.path.append(路径)其实就和他的意思一样。这样python就会自动在自己的系统内部去找所运行的脚本。以下是自己写的脚本,只是一小部分。刚好能和上面的例子对应上。import osfrom check import Checkimport sysfrom apktool import ApkToolimport shutil# -*-coding:utf-8-*-def main(sdk_path,jar_path): print os.getcwd() jar = ApkTool(jar_path) temp_path = jar.decode(sdk_path, True) ver_path=os.path.join(temp_path,"res","raw","lebian_releaseid.txt") file=open(ver_path,'r') for i in file: if i[0]=="V": version=i.strip('\n') break current_path="D:\\" list=["subpackage","update"] print("--------------------------------------") subpackage=Check(temp_path,current_path,version,list) subpackage.init_fun() shutil.rmtree(temp_path, True) return 0if __name__=='__main__': main(sys.argv[1],sys.argv[2]);
阅读全文
0 0
- Qt 与python之间的通信(一)
- QT与python的串口通信
- Qt下Client与Server之间的双向TCP通信。
- Qt下Client与Server之间的双向TCP通信。
- usb-host与外设之间的通信(一)
- ReactNative高级---JavaScript与Native之间的通信(一)
- Qt 多线程之间的通信 实例 emit
- Python与Java之间Socket通信
- Python与Android之间Socket通信
- 进程之间与线程之间的通信
- QT小例子GUI(主)线程与子线程之间的通信
- QT小例子GUI(主)线程与子线程之间的通信
- Qt GUI程序中主线程与非主线程之间的通信
- Qt主线程与子线程之间的信号槽通信
- Qt GUI程序中主线程与非主线程之间的通信
- QT小例子GUI(主)线程与子线程之间的通信
- Python服务器与多种客户端(Python/Java/Android)之间的通信
- QT QWebKit使用心得(Qwebkit与Html之间通信)
- sql 与 hql
- 一、C++ 学生成绩系统
- USTC软件工程项目—2、课题细化确定
- iframe,switchToWindow报错--no such element: Unable to locate element
- 强大的图片加载框架Fresco的使用
- Qt 与python之间的通信(一)
- POJ 2533.Longest Ordered Subsequence
- shell学习手册(1)
- 收敛速率
- bzoj3130 [SDOI2013]费用流 结论+二分答案+网络流检验
- VS的$(TargetUniversalCRTVersion)值不对时如何修改
- ios-ipad横竖屏适配
- Android ToolBar使用详解
- Hadoop本地运行模式深入理解