python 可以将C++ widget嵌入PyQt应用程序吗?

fd3cxomn  于 2023-09-29  发布在  Python
关注(0)|答案(2)|浏览(104)

我有一个PyQt5应用程序和大多数用Python编写的小部件。我想用C++ Qt写一些小部件,使它更快,然后将其嵌入到我的PyQt QMainWindow中。
有可能吗?

9wbgstp7

9wbgstp71#

你可以使用SIP来执行一个用C++从Python创建的小部件,在下面的link中我展示了一个如何做到这一点的例子。
示例的结构如下:

├── configure.py
├── sip
│   ├── AnalogClock.sip
│   └── PyAnalogClock.sip
└── src
    ├── analogclock.cpp
    ├── analogclock.h
    ├── analogclockl_global.h
    └── AnalogClock.pro

在src文件夹中,您必须创建小部件库
在sip文件夹中,您必须放置要公开的类的结构:

模拟时钟.sip

%Import QtGui/QtGuimod.sip
%Import QtWidgets/QtWidgetsmod.sip

%If (Qt_5_0_0 -)

class AnalogClock : public QWidget{

%TypeHeaderCode
#include "analogclock.h"
%End

public:
    AnalogClock(QWidget *parent /TransferThis/ = 0);

protected:
    virtual void resizeEvent(QResizeEvent *);
    virtual void paintEvent(QPaintEvent *e); 
};

%End

PyAnalogClock.sip

%Module(name=PyAnalogClock, call_super_init=True, keyword_arguments="Optional")
%DefaultMetatype PyQt5.QtCore.pyqtWrapperType
%DefaultSupertype sip.simplewrapper
%Include AnalogClock.sip

configure.py是配置项目编译的脚本,如果你有任何问题,你必须修改一些路径(它已经在Linux中测试过)
然后通过执行以下命令编译它:

python configure.py
make 
sudo make install

当执行前一个时,它会生成一个名为modules的文件夹,其中是动态库,在示例PyAnalogClock.so的情况下,我们将此文件放置在源代码的文件夹中:

.
├── main.py
└── PyAnalogClock.so

main.py

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyAnalogClock import AnalogClock

if __name__=="__main__":
    import sys

    a=QApplication(sys.argv)
    w=AnalogClock()
    w.show()
    sys.exit(a.exec_())

产出:

cyvaqqii

cyvaqqii2#

您可以使用SIPC++代码创建绑定,方法与创建PyQt绑定的方法相同。
然而,SIP生成的绑定本身就是C++代码,在PyQt的情况下,直接链接到Qt二进制文件。如果你只是打算将PyQt代码重写为C++,那么实现的任何加速都可以忽略不计,因为首先执行的本地python很少。

相关问题