2017-05-30 74 views

回答

1

你可以使用SIP從python中執行一個用C++創建的小部件,下面的link我給出了一個如何執行它的例子。

的例子的結構如下:

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

src文件夾中,你必須創建部件庫

在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 

當執行前一個時,它會生成一個名爲modules的文件夾,裏面是動態庫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_()) 

輸出:

enter image description here

+0

謝謝你的回覆。我試圖建立它,但它失敗了。 python3 configure.py通過,但'make'步驟說它找不到庫MyLabel – Felix

+0

什麼是您的操作系統? – eyllanesc

+0

你完全下載了整個github項目嗎? – eyllanesc

1

您可以使用SIP爲您的C++代碼創建綁定,與創建PyQt綁定的方式相同。

但是,由SIP生成的綁定本身代碼爲C++,並且在PyQt的情況下直接鏈接到Qt二進制文件中。如果你只是打算重寫PyQt代碼爲C++,那麼實現的任何加速將可以忽略不計,因爲首先執行的本地python很少。

相關問題