可以打电话吗QMetaObject.invokeMethodPySide2中的参数

2024-06-24 13:46:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试着通过一个QObject的slot调用QMetaObject.invokeMethod在PySide2。插槽需要一个应包装在QGenericArgument中的参数。这个QtCore.qgenericalargument文件总是抱怨提供给它的价值观。你知道吗

传统的C++方式是用QyARG来完成的,对于PyTr2,我找不到。在Qt示例中找不到任何最小样本。我在互联网上发现的唯一东西是this script,它也抱怨参数值

from PySide2.QtWidgets import QApplication
from PySide2.QtCore import QObject, QMetaObject, QThread, Signal, Slot, QGenericArgument, Qt

class TestMeta(QObject):
    def __init__(self, parent=None):
        super().__init__(parent)

    @Slot(int)
    def method(self, name):
        print(QThread.currentThread())
        print ("Method is called with argument {}".format(name))

import sys

if __name__ == "__main__":
    app = QApplication(sys.argv)
    test_meta = TestMeta()
    thread = QThread()
    test_meta.moveToThread(thread)
    thread.start()
    test_meta.method(12)
    print(QThread.currentThread())

    QMetaObject.invokeMethod( test_meta, "method", QGenericArgument('int', 12));

    sys.exit(app.exec_())

对于上面的代码,它将打印以下错误消息

 QMetaObject.invokeMethod( test_meta, "method", QGenericArgument('int', 12));
ValueError: 'PySide2.QtCore.QGenericArgument' called with wrong argument values:
  PySide2.QtCore.QGenericArgument('int', 12)
Found signature:
  PySide2.QtCore.QGenericArgument(str = None, int = None)

Tags: nametestimportnonemethodmetaintprint