如何将动态数据添加到 QML 表 [英] How to Add Dynamic Data to a QML Table

查看:81
本文介绍了如何将动态数据添加到 QML 表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从 Python 向表中添加行.我正在使用用 QML 描述的 TableView.

I'm trying to add rows to a table from Python. I'm using a TableView described with QML.

我不知道如何将模型添加到表中,除非模型也在 QML 中.但我不知道如何向模型添加值.

I can't figure out how to add a model to the table, unless the model is also in QML. But I can't figure out how to add values to the model.

import sys
from PyQt5.QtCore import QAbstractTableModel, QObject, QUrl
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtQuick import QQuickView
from PyQt5.QtWidgets import QApplication



myApp = QApplication(sys.argv)

engine = QQmlApplicationEngine()
context = engine.rootContext()
context.setContextProperty("main", engine)

engine.load('users.qml')

mainWin = engine.rootObjects()[0]

# Add items
userTable = mainWin.findChild(QObject, "userTable")
tableModel = mainWin.findChild(QObject, "libraryModel")
tableModel.setData(tableModel.index(0), "one")
tableModel.setData(tableModel.index(1), "one")

mainWin.show()

sys.exit(myApp.exec_())

users.qml

import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
    ListModel {
        id: libraryModel
        objectName: "libraryModel"
        ListElement {
            title: "A Masterpiece"
            author: "Gabriel"
        }
        ListElement {
            title: "Brilliance"
            author: "Jens"
        }
        ListElement {
            title: "Outstanding"
            author: "Frederik"
        }
    }

    TableView {
        objectName: "userTable"
        anchors.fill: parent
        TableViewColumn {
            role: "title"
            title: "Title"
        }
        TableViewColumn {
            role: "author"
            title: "Author"
        }
        model: libraryModel
    }
}

编辑

tableModel.append({'author': 'one', 'title': 'two'})

builtins.TypeError: unable to convert argument 0 of 

QAbstractListModel.append from 'dict' to 'QQmlV4Function*'

推荐答案

由于没有人回答这个问题,我建议您使用一种解决方法:在 qml 中创建一个带有两个参数的 javascript 函数,并直接从 QML 文件将元素添加到表中.

Since nobody answered the question yet I will suggest you to use a workaround: Create a javascript function in qml with two arguments and add elements into to table right from QML file.

(显然你必须先从 python 调用函数,但那是小菜一碟......)

(Obviously you have to call the function from python first, but thats a piece of cake...)

附言如果您想展示示例,请在评论中告诉我:]

P.S. If you wanna show example let me know in comment :]

添加代码

import QtQuick 2.3
import MyApplication 1.0

QPythonBinding{
id: binding
signal addElement(string param1, string param2)
    onAddElement: {
        myModel.append({"key1" : param1, "key2" : param2})
    }
}

现在是python代码

now python code

class QPythonBinding(QQuickItem):
    def __init__(self, parent=None):
        super(QPythonBinding, self).__init__(parent)

    addElement = pyqtSignal(str, str)   #you call it like this  - addElement.emit("name", "value")


if __name__ == '__main__':
    import sys
    app = QGuiApplication(sys.argv)

    qmlRegisterType(QPythonBinding, "MyApplication", 1, 0, "QPythonBinding")
    view = QQuickView()

    view.show()
    app.exec_()

这篇关于如何将动态数据添加到 QML 表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆