Я пытаюсь вызвать слот 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)