如何使用信号将python字典发送到QML接口?

如何使用信号将python字典发送到QML接口?,python,qml,pyside2,qt-signals,qt-slot,Python,Qml,Pyside2,Qt Signals,Qt Slot,我想将包含动态创建qml对象所需数据的字典从PySide2类发送到qml接口,因为我需要响应某些事件,所以我需要使用信号和插槽 因为我刚刚开始使用QML和python,所以我尝试创建一个简单的项目,只是为了玩(从代码中可以看到) QML: Python 3: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys import os from time import sleep from PySide2.QtCore import Q

我想将包含动态创建qml对象所需数据的字典从PySide2类发送到qml接口,因为我需要响应某些事件,所以我需要使用信号和插槽

因为我刚刚开始使用QML和python,所以我尝试创建一个简单的项目,只是为了玩(从代码中可以看到)

QML:

Python 3:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import os
from time import sleep

from PySide2.QtCore import Qt, QObject, Signal, Slot, Property, QThread
from PySide2.QtWidgets import QApplication    
from PySide2.QtQml import QQmlApplicationEngine

class Test1(QObject):
    theSignal = Signal(dict)
    def __init__(self):
        QObject.__init__(self)

    @Slot(int)
    def catchInt(self,caught):
        print("Caught: {0}".format(caught))
        testDict = {"myAnswer":caught}
        self.theSignal.emit(testDict)


if __name__ == "__main__":
    os.environ["QT_QUICK_CONTROLS_STYLE"] = "Material"
    app = QApplication(sys.argv)
    engine = QQmlApplicationEngine()
    stuff1 = {"text":"Trying"}
    stuff2 = {"text":"To send"}
    stuff3 = {"text":"Dict"}
    ctx = engine.rootContext()
    ctxVar = Test1()
    ctx.setContextProperty("stuff1", stuff1)
    ctx.setContextProperty("stuff2", stuff2)
    ctx.setContextProperty("stuff3", stuff3)
    ctx.setContextProperty("TestVar",ctxVar)
    engine.load('main.qml')
    if not engine.rootObjects():
        sys.exit(-1)

    sys.exit(app.exec_())
我期望的结果(使用“python3 Test\u dict\u 1.py”启动脚本)是:

我得到的是:

Caught: 1
qml: undefined.
Caught: 2
qml: undefined.
Caught: 1
qml: undefined.
...etc...

你能告诉我我做错了什么吗?代码中是否有错误或无法执行此操作?

您必须在信号中使用的签名是
QVariant

class Test1(QObject):
    theSignal = Signal('QVariant')

    @Slot(int)
    def catchInt(self,caught):
        print("Caught: {0}".format(caught))
        testDict = {"myAnswer":caught}
        self.theSignal.emit(testDict)
Caught: 1
qml: undefined.
Caught: 2
qml: undefined.
Caught: 1
qml: undefined.
...etc...
class Test1(QObject):
    theSignal = Signal('QVariant')

    @Slot(int)
    def catchInt(self,caught):
        print("Caught: {0}".format(caught))
        testDict = {"myAnswer":caught}
        self.theSignal.emit(testDict)