私はPyQt5アプリケーションとPythonで書かれたほとんどのウィジェットを持っています。私はいくつかのウィジェットをC++のQtで書いて、Pygt QMainWindowに埋め込みました。PyQtアプリケーションにC++ウィジェットを埋め込むことは可能ですか?
可能ですか?
私はPyQt5アプリケーションとPythonで書かれたほとんどのウィジェットを持っています。私はいくつかのウィジェットをC++のQtで書いて、Pygt QMainWindowに埋め込みました。PyQtアプリケーションにC++ウィジェットを埋め込むことは可能ですか?
可能ですか?
SIPを使用すると、C++で作成されたウィジェットをPythonから次のように実行することができます。linkこれを行う方法の例を示します。次のように
例の構造は次のとおりです。
srcフォルダに├── configure.py
├── sip
│ ├── AnalogClock.sip
│ └── PyAnalogClock.sip
└── src
├── analogclock.cpp
├── analogclock.h
├── analogclockl_global.h
└── AnalogClock.pro
あなたはあなたが公開するクラスの構造を配置する必要があり、SIPフォルダにウィジェットライブラリ
を作成する必要があります:
AnalogClock.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
前のモジュールを実行するとモジュールと呼ばれるフォルダが生成され、その中には動的ライブラリがありますyは、例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_())
出力:
SIPを使用して、C++
コードのバインディングを、PyQt
バインディングと同じ方法で作成できます。
しかし、SIPによって生成されたバインディング自体はC++
コードであり、PyQt
の場合はQt
バイナリに直接リンクされています。 PyQt
コードをC++
と書き換えるつもりなら、最初に実行されるネイティブのPythonがほとんどないため、実現されるスピードアップはごくわずかです。
返信いただきありがとうございます。私はそれを構築しようとしているが、失敗する。 python3 configure.pyは渡しますが、 'make'はライブラリMyLabelを見つけることができません。 – Felix
あなたのOSは何ですか? – eyllanesc
githubプロジェクト全体を完全にダウンロードしましたか? – eyllanesc