Можно ли вызвать QMetaObject.invokeMethod с аргументами в PySide2 - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь вызвать слот QObject через QMetaObject.invokeMethod в PySide2.Слот ожидает аргумент, который должен быть заключен в QGenericArgument.QtCore.QGenericArgument всегда жалуется на предоставленные ему значения.

В традиционном C ++ это делается с помощью Q_ARG, который я не могу найти для PySide2.Не удается найти минимальный образец в примерах Qt.Единственное, что я нашел в интернете, это этот скрипт , который также жалуется на значения аргументов

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)
...