Как вы возвращаете объект из Python в QML? - PullRequest
2 голосов
/ 11 марта 2011

Я пытаюсь вернуть QObject из слота. Я использую PySide и QML. Мой код выглядит так:

class myClass(QtCore.QObject):
    def __init__(self):
        self.object = QtCore.QObject()

    QtCore.Slot(result=object)
    def myFunc(self):
        return self.object

Когда я console.log возвращаемое значение я получаю:

QVariant(PySide::PyObjectWrapper)

Кажется, я не могу извлечь выгоду из этой вещи. Может ли кто-нибудь указать мне правильное направление? Я могу вернуть примитивные типы (например, int, str и т. Д.), Но объекты, списки и подсказки находятся вне моего понимания Любая помощь будет принята с благодарностью.

EDIT

Я пытаюсь получить доступ к свойствам объекта, используя точечные обозначения. Если бы кто-нибудь мог показать мне пример этого, это было бы очень полезно. Однако, если бы я мог просто вернуть объект, я думаю, что смог бы пройти расстояние сам. Еще раз спасибо!

Спасибо

Jack

1 Ответ

2 голосов
/ 14 июня 2011

Итак, вот что делает то, что я думаю вы пытаетесь сделать. Когда вы щелкаете в любом месте, синяя область становится зеленой. Это делается путем изменения свойства цвета объекта, который передается сигналом.

#!/usr/bin/env python

import sys
from PySide import QtCore
from PySide.QtGui import QApplication
from PySide.QtDeclarative import QDeclarativeView
from PySide.QtOpenGL import QGLWidget

def some_function(passed_object):
    passed_object.setProperty("color", "green")

def main(argv):
    app = QApplication(argv)

    display_widget = QDeclarativeView()
    display_widget.setViewport(QGLWidget())

    display_widget.setResizeMode(QDeclarativeView.SizeRootObjectToView)
    display_widget.setSource(QtCore.QUrl('pass_an_object.qml'))

    display_widget.rootObject().object_signal.connect(some_function)

    display_widget.show()
    display_widget.resize(640,480)

    sys.exit(app.exec_())

if __name__ == '__main__':
    main(sys.argv)

С сопровождающим файлом qml (я назвал его pass_an_object.qml):

import QtQuick 1.0

Rectangle {
    id: foo
    width: 640
    height: 640
    color: "red"

    signal object_signal(variant foo)

    Rectangle {
        id: an_object
        width: 100
        height: 100
        color: "blue"
    }

    MouseArea {
        anchors.fill: parent
        onClicked: {
            object_signal(an_object)
        }

    }
}
...