Qt 与python之间的通信(一)

  自己目前了解的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\include
 
 
LIBS += \
        -L C:\Python27\libs -lpython27
2:在python->lib->site-packages 目录下添加一个*.pth的文件。以pth结尾的。比如path.pth.
在里面添加python脚本所要运行的脚本路径;
举个例子:
 import sys
 sys.path.append(路径)
其实就和他的意思一样。这样python就会自动在自己的系统内部去找所运行的脚本。



以下是自己写的脚本,只是一小部分。刚好能和上面的例子对应上。
import os
from check import Check
import sys
from apktool import ApkTool
import 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 0
if __name__=='__main__':
    main(sys.argv[1],sys.argv[2]);
 
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python中,可以使用PyQt5库来实现qt5 tcp通信。以下是一个简单的示例代码: ```python import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtNetwork import * class MyTcpServer(QObject): def __init__(self, parent=None): super().__init__(parent) self.tcpServer = QTcpServer(self) self.tcpServer.newConnection.connect(self.handleConnection) self.tcpServer.listen(QHostAddress.Any, 8888) def handleConnection(self): client = self.tcpServer.nextPendingConnection() client.readyRead.connect(self.receiveData) def receiveData(self): client = self.sender() data = client.readAll() print("Received:", data.decode()) class MyTcpClient(QObject): def __init__(self, parent=None): super().__init__(parent) self.tcpSocket = QTcpSocket(self) self.tcpSocket.connected.connect(self.connected) self.tcpSocket.readyRead.connect(self.receiveData) self.tcpSocket.connectToHost("localhost", 8888) def connected(self): print("Connected") def receiveData(self): data = self.tcpSocket.readAll() print("Received:", data.decode()) def sendData(self, data): self.tcpSocket.write(data) self.tcpSocket.flush() if __name__ == "__main__": app = QApplication(sys.argv) server = MyTcpServer() client = MyTcpClient() client.sendData("Hello, server".encode()) sys.exit(app.exec_()) ``` 这个示例代码实现了一个简单的TCP服务器和客户端。服务器监听端口8888,并在收到客户端连接后,接收客户端发送的数据。客户端连接到localhost:8888,并发送一条消息给服务器。 在这个示例代码中,我们使用了QTcpServer和QTcpSocket类来实现TCP通信QTcpServer用于监听端口并接收连接,QTcpSocket用于连接到服务器并发送/接收数据。 ### 回答2: Python Qt5是一种常用的界面开发工具,可以用来创建GUI应用程序。而TCP通信则是一种常见的网络通信协议,用于在不同设备之间传输数据。 Python Qt5提供了QTcpSocket类,可以通过创建一个套接字对象来建立TCP连接,并进行通信。首先,需要导入PyQt5库,并创建一个QTcpSocket对象。 然后,可以使用QTcpSocket对象的connectToHost方法来连接到指定的IP地址和端口号。成功连接后,可以使用write方法发送数据,使用readAll方法获取对方发送的数据。 对方的接收程序也需要使用TCP通信方式,创建一个QTcpServer对象,并监听指定的端口号。成功建立连接后,通过QTcpServer对象的nextPendingConnection方法获取到已连接的SOCKET对象,并使用readAll方法获取对方发送的数据。 在完成通信后,可以使用QTcpSocket对象的disconnectFromHost方法断开连接,同时也需要关闭QTcpServer对象。 总之,通过Python Qt5可以轻松实现TCP通信,无论是创建界面还是进行网络通讯都非常方便。这种方法可以应用于各种场景,如客户端服务器模式的数据传输、远程控制等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值