【问题标题】:How can I send and unpack the list of tuples from python to qml?如何将元组列表从 python 发送和解包到 qml?
【发布时间】:2018-07-14 08:13:09
【问题描述】:

我需要在 python 端生成一个元组列表,并将其发送到 qml 并打印出来,但是当我尝试在 qml 端打印出这个列表时,它会打印:

qml: [QVariant(PyQt_PyObject),QVariant(PyQt_PyObject),QVariant(PyQt_PyObject),QVariant(PyQt_PyObject),QVariant(PyQt_PyObject),QVariant(PyQt_PyObject),QVariant(PyQt_PyObject),QVariant(PyQt_PyObject),QVariant(PyQt_PyObject),QVariant(PyQt_PyObject)]

如何解压这些值?

更新

小例子:

main.py

​​>
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot


class Plot(QObject):
    def __init__(self):
        QObject.__init__(self)

    updCanv = pyqtSignal(list, arguments=['upd'])


    @pyqtSlot()
    def upd(self):
        points = [(1, 2), (3, 4)]

        self.updCanv.emit(points)

if __name__ == "__main__":
    import sys
    sys.argv += ['--style', 'material']
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    plot = Plot()
    engine.rootContext().setContextProperty("plot", plot)
    engine.load("main.qml")
    engine.quit.connect(app.quit)
    sys.exit(app.exec_())

main.qml

import QtQuick 2.0
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.2

ApplicationWindow {
        visible: true

        Button {
            text: qsTr("Get points")
            onClicked: plot.upd()
        }

        Connections {
            target: plot
            onUpdCanv: print(upd)
        }
}

【问题讨论】:

标签: python qt pyqt qml pyqt5


【解决方案1】:

并非所有类型都映射到 QML 中,例如 python 的类型列表映射为 QML 的列表类型,但在元组的情况下不是,所以解决方案是使用一些等效类型或者创建一些新类型,在这种情况下,您可以轻松使用 QPointF(),因为元组有 2 个元素。

class Plot(QObject):
    updCanv = pyqtSignal(list, arguments=['upd'])
    @pyqtSlot()
    def upd(self):
        points = [(1, 2), (3, 4)]
        p = [QPointF(*v) for v in points]
        self.updCanv.emit(p)

输出:

qml: [QPointF(1, 2),QPointF(3, 4)]

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多