Передача класса QMainWindow из c++ в Python

У меня есть приложение на qt6, которое имеет API на Python.

mainwindow.cpp

Ui_MainWindow::Ui_MainWindow(QWidget* parent) : QMainWindow(parent), MainWindow(this) {
    MainWindow = this;
    this->setupUi();
    Py_Initialize();

    PyObject* moduleName = PyUnicode_FromString("api");
    PyObject* module = PyImport_Import(moduleName);
    Py_DECREF(moduleName);

    if (module != nullptr) {
        PyObject* classAPI = PyObject_GetAttrString(module, "API");

        if (classAPI && PyCallable_Check(classAPI)) {
            // Передаем указатель как PyLong
            PyObject* pPointer = PyLong_FromVoidPtr(static_cast<void*>(MainWindow));
            PyObject* pArgs = PyTuple_Pack(1, pPointer);

            PyObject* pInstance = PyObject_CallObject(classAPI, pArgs);

            Py_DECREF(pArgs);

            if (pInstance != nullptr) {
                this->api = pInstance;

                PyObject* pResult = PyObject_CallMethod(pInstance, "loadThemes", nullptr);
                if (pResult == nullptr) {
                    PyErr_Print();
                } else {
                    Py_DECREF(pResult);
                }
            } else {
                PyErr_Print();
            }
            Py_XDECREF(classAPI);
        } else {
            PyErr_Print();
        }
        Py_DECREF(module);
    } else {
        PyErr_Print();
    }
}

mainwindow.h

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <Python.h>
#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class Ui_MainWindow : public QMainWindow {
    Q_OBJECT

public:
    Ui_MainWindow(QWidget* parent = nullptr);
    ~Ui_MainWindow();

    void setupUi();

private:
    Ui::MainWindow *ui;
    QMainWindow* MainWindow;
    PyObject* api;
};

И класс API на Python

class API(QObject):
    def __init__(self, parent):
        super().__init__(parent)
        self.__window = parent

Как передать класс MainWindow в Python, чтобы пользоваться им как нормальным PyQt классом? Уже пробовал передачу в виде PyCapsule, но не получилось. Ошибка в ctypes

Traceback (most recent call last):
  File "C:\Users\Vlad\Documents\VarTexter2\build\Desktop_Qt_6_7_2_llvm_mingw_64_bit-Debug\api.py", line 29, in __init__
    get_data_from_capsule(parent)
  File "C:\Users\Vlad\Documents\VarTexter2\build\Desktop_Qt_6_7_2_llvm_mingw_64_bit-Debug\api.py", line 12, in get_data_from_capsule
    ptr = ctypes.cast(capsule, ctypes.py_object).value
  File "C:\Users\Vlad\AppData\Local\Programs\Python\Python310\Lib\ctypes\__init__.py", line 510, in cast
    return _cast(obj, obj, typ)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

Ответы (0 шт):