【发布时间】:2019-03-07 09:40:32
【问题描述】:
我正在尝试找到一种从 PySide2.QtCore.Slot 返回 python 字典的方法。
main.py
import sys
from PySide2.QtCore import QObject, Slot
from PySide2.QtGui import QGuiApplication, QQmlApplicationEngine
class Backend(QObject):
def __init__(self, parent=None):
return super().__init(parent)
@Slot(result=QObject)
def get_data(self):
data = {}
data["info1"] = "some information"
data["info2"] = "some more information"
data["info3"] = 42
return data
if __name__ == '__main':
BACKEND = Backend()
APP = QGuiApplication(sys.argv)
ENGINE = QQmlApplicationEngine(APP)
ENGINE.rootContext().setContextProperty('backend', BACKEND)
ENGINE.load("main.qml")
sys.exit(APP.exec_())
main.qml:
import QtQuick 2.4
import QtQuick.Controls 1.4
ApplicationWindow {
id: root
width: 640
height: 480
visible: true
color: "#F0F0F0"
title: qsTr("Test")
Text {
anchors.centerIn: parent
text: backend.get_data()["info1"]
}
}
我认为它以某种方式在 QAbstractItemModel.roleNames() 中完成,因为它返回 QHash<int, QByteArray>?
如果它不能这样工作,任何人都可以支持我在 python 后端和 QML 前端之间交换信息的“正确方法”吗?
提前致谢:)
【问题讨论】: