小编eug*_*oei的帖子

将 Python 对象列表传递给 qml

我正在尝试将对象列表从 python 传递到 qml。在qml方面,我将解释这些信息并使用repeater和listmodel元素,以类似表格的方式显示这些信息。

如果我只是传递一个对象或整数列表,我可以读取 qml 端的信息。但否则在尝试传递对象列表时。我如何读取 qml 端的对象列表?我必须使用不同的属性吗?

以下是我到目前为止所拥有的:

class File(QObject):
    def __init__(self, fileName, commentsStatus, diagnosisStatus, parent=None):
        QObject.__init__(self, parent)
        self.fileName = fileName
        self.commentsStatus = commentsStatus
        self.diagnosisStatus = diagnosisStatus  

class DisplayComponent(QObject):
    def __init__(self, parent = None):
        QObject.__init__(self, parent)
        self.list = [File("file 1", True, False), File("file 2", False, True)]

    @pyqtProperty(QQmlListProperty)
    def getDicomFilesList(self):
        return QQmlListProperty(File, self, self.list)
Run Code Online (Sandbox Code Playgroud)

通过以下方式暴露给 qml 端: context.setContextProperty("dicomFiles", displayComponent)

这就是我在 qml 端阅读列表的方式:

HanaContainer {

    Text {
        id: display
        text: "no signal detected yet"
    }

    Component.onCompleted: {
        console.log(dicomFiles.getDicomFilesList[1]) // prints …
Run Code Online (Sandbox Code Playgroud)

python pyqt qml pyqt5

5
推荐指数
1
解决办法
1792
查看次数

如何在python和qml自动更新中插入/编辑QAbstractListModel?


我正在尝试插入/编辑一个从QAbstractListModelpyqt5子类化的 python 列表。这个python列表是在qmlmodel中ListView元素的属性中读取的。我在 qml 中显示数据没有问题。当我尝试将新数据附加到 python 列表时出现问题。

以下是我到目前为止所做的:

主要.py:

import sys, model2
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView

class MainWindow(QQuickView):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.model = model2.PersonModel()
        self.rootContext().setContextProperty('PersonModel', self.model)
        self.rootContext().setContextProperty('MainWindow', self)
        self.setSource(QUrl('test2.qml'))

myApp = QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(myApp.exec_())
Run Code Online (Sandbox Code Playgroud)

模型2.py

from PyQt5.QtCore import QAbstractListModel, Qt, pyqtSignal, pyqtSlot

class PersonModel(QAbstractListModel):

    Name = Qt.UserRole + 1
    Age = Qt.UserRole + 2

    personChanged = pyqtSignal()

    def __init__(self, parent=None):
        super().__init__(parent)
        self.persons …
Run Code Online (Sandbox Code Playgroud)

python pyqt qml qabstractlistmodel pyqt5

3
推荐指数
1
解决办法
3935
查看次数

标签 统计

pyqt ×2

pyqt5 ×2

python ×2

qml ×2

qabstractlistmodel ×1