python - 如何将表模型数据传递给 qml?
问题描述
我看到一些用 c++ 风格编写的代码,我尝试用 python 风格编写它。
我在 python 文件中编写了一个表模型,然后将其传递给 qml 文件。
但是当我运行我的main.py
文件时,窗口什么也没有显示。
而且我的程序没有显示任何错误,我不知道这里出了什么问题?有人可以知道原因吗?
主文件
import os
from pathlib import Path
import sys
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import QAbstractTableModel, Qt
class TableModel(QAbstractTableModel):
def __init__(self):
super().__init__()
def rowCount(self, parent):
return 10
def columnCount(self, parent) -> int:
return 10
def data(self, index, role: int):
if index.isValid() and role == Qt.DisplayRole:
return f"{index.row()},{index.column()}"
return None
if __name__ == "__main__":
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.rootContext().setContextProperty('myModel', TableModel())
engine.load(os.fspath(Path(__file__).resolve().parent / "table.qml"))
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
表.qml
import QtQuick 2.15
import QtQuick.Window 2.15
Window {
width: 320
height: 320
visible: true
TableView {
anchors.fill: parent
rowSpacing: 5
columnSpacing: 5
model: myModel
delegate: myDele
}
Component {
id: myDele
Rectangle {
implicitHeight: 50
implicitWidth: 50
width: 50
height: 50
color: "#abc"
Text {
anchors.centerIn: parent
text: display
}
}
}
}
解决方案
问题是由内存管理引起的,最好分配给变量而不是将对象直接传递给方法,因为应该假设将使用该对象但不会管理其内存,除非文档指出。
在这种情况下,您必须将对象保存在变量中,然后使用它:
myModel = TableModel()
engine.rootContext().setContextProperty('myModel', myModel)
推荐阅读
- google-maps - 为什么 turfjs 距离返回的结果与 Google Map 几何库 computeDistanceBetween 不同?
- jenkins - 无法将参数从一个管道作业传递到另一个
- reactjs - 如何更改 React 地图中的渲染顺序
- tfs - 功能的 TFS 查询未“完成”,但所有子用户故事都“完成”
- javascript - 如果 Vimeo 视频未加载,则创建静态图像后备
- c# - 如何使用 Postman 将 JSON 数组发布到 ASP.Net Core 应用程序
- reactjs - 如果我在具有不必要依赖项的 react 应用程序上运行 npm build,它还会捆绑这些依赖项吗?
- mysql - 在 SQL 查询的 BETWEEN 子句中使用 Excel 单元格中的日期
- python - “None for c in”代表什么?
- java - 带有 SupportFragmentTestUtil.startVisibleFragment(myFragment) 的 Roboelectric 中的 IllegalStateException