繁体   English   中英

PySide2 是否支持 QML TableModel?

[英]Is QML TableModel supported in PySide2?

我一直在使用 QML 进行 PySide2 编程。 就在我似乎掌握了一切,包括正确的视图/模型分离和理解 QML 概念和绑定时,我遇到了障碍。

我需要显示表格类型的数据,所以自然而然地跑到了QML表格Model。 但是,当我尝试从 Python 运行纯 QML 的简单示例时,我遇到了错误:

TableModelExample.qml:16 TableModel is not a type

qml 代码只是我在Qt 的 TableModel 文档中找到的第一个示例

python 代码非常简单:

import sys
import os
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine

if __name__ == "__main__":
    # UI setup
    sys.argv += ['--style', 'fusion']
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    engine.load(os.path.join(os.path.dirname(__file__), "TableModelExample.qml"))
    if not engine.rootObjects():
      sys.exit(-1)
    sys.exit(app.exec_())

谁能解释发生了什么? 而且,当人们在学习过程中达到这一点时,是否有任何好的 PySide2/QML 学习工具?

编辑:

虽然 QML 代码已链接,但这里是:

import QtQuick 2.12
import QtQuick.Window 2.12
import Qt.labs.qmlmodels 1.0

Window {
    width: 400
    height: 400
    visible: true

    TableView {
        anchors.fill: parent
        columnSpacing: 1
        rowSpacing: 1
        boundsBehavior: Flickable.StopAtBounds

        model: TableModel {
            TableModelColumn { display: "checked" }
            TableModelColumn { display: "amount" }
            TableModelColumn { display: "fruitType" }
            TableModelColumn { display: "fruitName" }
            TableModelColumn { display: "fruitPrice" }

            // Each row is one type of fruit that can be ordered
            rows: [
                {
                    // Each property is one cell/column.
                    checked: false,
                    amount: 1,
                    fruitType: "Apple",
                    fruitName: "Granny Smith",
                    fruitPrice: 1.50
                },
                {
                    checked: true,
                    amount: 4,
                    fruitType: "Orange",
                    fruitName: "Navel",
                    fruitPrice: 2.50
                },
                {
                    checked: false,
                    amount: 1,
                    fruitType: "Banana",
                    fruitName: "Cavendish",
                    fruitPrice: 3.50
                }
            ]
        }
        delegate:  TextInput {
            text: model.display
            padding: 12
            selectByMouse: true

            onAccepted: model.display = text

            Rectangle {
                anchors.fill: parent
                color: "#efefef"
                z: -1
            }
        }
    }
}

Pyside 版本:

pyside2                   5.13.2           py37ha8f7116_2    conda-forge

文档明确指出TableModel是在 5.14 中创建的。

在此处输入图像描述

我已经用 pyside2 5.15.2 测试了 MRE,它工作正常:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM