pyqtSlot() 和返回类型 python list

5
我需要使用pyqtSlot()装饰器将Python函数暴露给JavaScript代码。
返回类型是列表,所以我应该写:
@pyqtSlot(result=list)
但是我遇到了一个错误:
“TypeError: unable to convert a Python 'list' object to a C++ 'PyQt_PyObject' instance”
我进行了一些研究,但仍然找不到答案。
根据pyqt文档,我可以返回任何Python类型对象或指定C++类型的字符串,所以我尝试了result='array'。
但它不起作用,或者我做错了什么。
@pyqtSlot(result=list)
def getCodeList(self):
    return self.codeList

我没想到你可以从一个插槽中返回结果... - three_pineapples
在pyqtSlot()装饰器中是必须的。http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html#the-pyqtslot-decorator - Alon Lavi
1个回答

9

我想我找到了一种方法。
我只是用 QVariant() 包装 Python 列表并返回 QVariant。

@pyqtSlot(result=QVariant)
def getCodeList(self):
    return QVariant(self.codeList)

感谢QVariant。

你如何将 QVariant 转换为列表? - Aleksandar
1
我不需要转换,它只是有效的。 但是,如果我尝试根据我的一点知识理解为什么 pyqtSlot 装饰器被创建,那是为了将结果传递到 C++ 中,因为 Qt 是用 C++ 编写的语言。 因此,Python 中的列表类型被转换为 C++ 的数组类型,使用 QVariant。 所有这些都是为了让 QtWebkit 桥接技术可以将用 C++(或使用装饰器 pyqtSlot 的 Python)编写的代码暴露给 JavaScript 代码。 我所写的一切都不是100%确定的。 所以请谨慎对待。 - Alon Lavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接