如何通过 Python C api 在 QT 和 Python 之间进行接口

Posted

技术标签:

【中文标题】如何通过 Python C api 在 QT 和 Python 之间进行接口【英文标题】:How to interface between QT with Python by Python C api 【发布时间】:2014-09-17 23:00:10 【问题描述】:

我正在编写一个与 python 交互的 Qt 程序。我必须将 Circle 类的 C++ 对象直接发送到 Python

    1) Need to create a Python Module ( let say Shape )
    2) Need to add a Python Class PCircle in Shape module which is equivalent to C++ 
       Circle class.
    3) Do the calculation on Python Environment ( Python 3.4)
    4) Populate the data into PCircle Object in Python
    5) Send it back to Qt Environment by storing the PCircle values to C++ Circle Object    
    and show the changes in real time in display

这就是我如何描述我的问题和我的目标,如果有不清楚的地方请评论。

谢谢

【问题讨论】:

已经有pyqt ... 你能举个例子吗? 如果我想从命令行访问那些 Python 对象?我们该怎么做? python -c "from PyQt4 import QtGui;a=QtGui.QApplication();w= QtGui.QWidget();w.setWindowTitle("TEST");w.show();app.exec_();" 虽然我不确定你的意思是什么 您将需要使用诸如SIP 或Cython 之类的工具为您的C++ 类创建python 绑定(或查看here 以了解许多其他可能性)。如果这太麻烦了,您可以随时使用json 之类的东西序列化您的PCircle 类,然后通过套接字或其他东西将其发送到您的C++ 程序。 【参考方案1】:
    模块只是一个 python 文件...所以只需创建一个名为 Shape.py 的文件 打开Shape.py并添加

代码

from PyQt4 import QWidget
class PCircle(QWidget):
    #implement methods here that are available to the QTCircleWidget
    在 python 领域做一些计算

代码

def calculation(something):
    return somthing**2
    只需添加代码my_circle = PCircle(x,y,radius) 打印出您想要返回给调用程序的任何数据。调用程序将需要解析该数据并对其进行处理....

【讨论】:

假设我们有 Qt 程序并且其中嵌入了一个 Python 控制台。我们想从嵌入在底部的 Python 控制台控制顶部的 Qt 小部件。下面的操作我们需要做什么? 1)如何从python控制台计算Qt Widgets组框中的小部件(复选框)的数量,它们的名称和复选框的状态? 2) 如何从 python 控制台更改每个复选框的状态? 3) 如何从控制台添加或删除复选框?请看一下[链接]drive.google.com/file/d/0B0TTBJJE6aEbT3NIRzAyVG4xYzg/…

以上是关于如何通过 Python C api 在 QT 和 Python 之间进行接口的主要内容,如果未能解决你的问题,请参考以下文章

如何让python调用C和C++代码

如何让python调用C和C++代码

如何通过 Python/C API 将 Python 实例传递给 C++

如何在 ubuntu 中构建 Python Qt

如何让python调用C和C++代码

通过 C API 提供 QWidget 的 DLL