Можно ли встроить виджет C ++ в приложение PyQt?

У меня есть приложение PyQt5 и большинство виджетов, написанных на Python. Я хочу написать некоторый виджет в C ++ Qt, чтобы сделать его быстрее, а затем встроить его в мой PyQt QMainWindow.

Является ли это возможным?

2 Solutions collect form web for “Можно ли встроить виджет C ++ в приложение PyQt?”

Вы можете использовать SIP для выполнения виджета, созданного на C ++, из python, в следующей ссылке. Я показываю пример того, как это сделать.

Структура примера выглядит следующим образом:

├── 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 

При выполнении предыдущего он генерирует папку с PyAnalogClock.so модулей, внутри которой находится динамическая библиотека, в случае примера PyAnalogClock.so этот файл мы 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.

  • PyQT Подключение лямбда-функции к сигналу
  • PyQt. Получать ошибки, пытаясь отделить графический интерфейс от логики
  • PySide / PyQt обнаруживает, если пользователь пытается закрыть окно
  • В PyQt наилучший способ обмена данными между основным окном и потоком
  • pyqt: Как динамически обновлять свойство виджета при изменении внешней переменной?
  • Несколько файлов И выбор папок в QFileDialog?
  • PyQt: Как создать пользовательскую область прокрутки?
  • PyQt - как обнаружить и закрыть пользовательский интерфейс, если он уже запущен?
  • Как реализовать простую кнопку в PyQt
  • Совет по таймеру GUI для отображения времени прошедшего потока фона?
  • Как использовать параметры QFileDialog и извлекать saveFileName?
  • Python - лучший язык программирования в мире.