gpt4 book ai didi

python - 将 numpy 对象传递给 pythonqt 包装器

转载 作者:行者123 更新时间:2023-11-30 05:12:52 25 4
gpt4 key购买 nike

我有一个 C++ 类 myClass,我正在尝试创建一个基于 numpy 数组的创建器。

这是定义 new_ python 创建器的包装器,以 PyObject 作为参数:

class myClassPyWrapper : public QObject {
Q_OBJECT

public slots:
/*... many other creators here ...*/
myClass* new_myClass(PyObject* my_py_obj){
if (PyArray_Check(my_py_obj)) {
//do something
}
return nullptr;
}
}

但是当我输入时,创建者不会在 Python 中被调用:

a=np.array(np.zeros(100)).reshape(10,10)
b=myClass(a)

我得到:

py> a=np.array(np.zeros(100)).reshape(10,10)
py> b=myClass(a)
Traceback (most recent call last):
File "<string>", line 1, in <module>
ValueError: Could not find matching overload for given arguments:
(array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]),)
The following slots are available:
myClass() -> myClass
myClass(PyObject my_py_obj) -> myClass
myClass(myClass) -> myClass
myClass(int, int) -> myClass
myClass(int, int, double val) -> myClass
myClass(int, int, double val, QString name) -> myClass
myClass(QVector<double>, QPair<int,int>) -> myClass

我尝试用 PyArrayObject* 替换 Pyobject* 但我得到了同样的错误。

所有其他创作者都在工作。

我错过了什么?

最佳答案

我在这里发布我直接从 PythonQt 开发人员那里得到的答案,以防有人遇到同样的问题:

简短的回答是该方法返回一个 nullptr 并且 Qt 元系统正在检测(我不知道如何)并且没有调用该方法。

通过将 return nullptr 替换为通用构造函数(例如 return new myClass())可以解决问题。

关于python - 将 numpy 对象传递给 pythonqt 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44306969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com