您可以使用 SIP 来从 python 执行在 C++ 中创建的小部件,在以下链接中,我展示了如何执行此操作的示例。
示例的结构如下:
??? configure.py
??? sip
? ??? AnalogClock.sip
? ??? PyAnalogClock.sip
??? src
??? analogclock.cpp
??? analogclock.h
??? analogclockl_global.h
??? AnalogClock.pro
Run Code Online (Sandbox Code Playgroud)
在 src 文件夹中,您必须创建小部件库
在 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
Run Code Online (Sandbox Code Playgroud)
PyAnalogClock.sip
%Module(name=PyAnalogClock, call_super_init=True, keyword_arguments="Optional")
%DefaultMetatype PyQt5.QtCore.pyqtWrapperType
%DefaultSupertype sip.simplewrapper
%Include AnalogClock.sip
Run Code Online (Sandbox Code Playgroud)
configure.py 是配置项目编译的脚本,有问题一定要修改一些路径(Linux已经测试过)
然后通过执行以下命令编译它:
python configure.py
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
执行上一个时,它会生成一个名为 modules 的文件夹,里面是动态库,在示例中PyAnalogClock.so,我们将此文件放在源代码的文件夹中:
.
??? main.py
??? PyAnalogClock.so
Run Code Online (Sandbox Code Playgroud)
主文件
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_())
Run Code Online (Sandbox Code Playgroud)
输出:
| 归档时间: |
|
| 查看次数: |
3139 次 |
| 最近记录: |