从qml到python获取委托对象名

从qml到python获取委托对象名,python,pyqt,qml,pyqt5,Python,Pyqt,Qml,Pyqt5,我有一个ListView,在它里面有一个代理矩形,在这个矩形里面有一个图像对象。所以我想将图像对象名放入python PyQt5文件中,并为每个图像设置不同的源 ListView { model: 12 /*that mean that i have 12 images!*/ delegate: Rectangle { Image { objectName: "img" source: "file:///C:/Lo

我有一个ListView,在它里面有一个代理矩形,在这个矩形里面有一个图像对象。所以我想将图像对象名放入python PyQt5文件中,并为每个图像设置不同的源

ListView { 
    model: 12 /*that mean that i have 12 images!*/
    delegate: Rectangle {
        Image {
            objectName: "img"
            source: "file:///C:/LocalDir/Project/img/11.png"
        }
    }
}



def set_property():
    self.context = QQuickWidget()
    self.context.setSource(QUrl().fromLocalFile("QML-code.qml"))
    self.rootObj = context.rootObject()
    img = self.rootObj.findChild("img") 

    if img:
        img.setProperty("source", path)
    # and so on...but i don't know how to get img delegate

您走错了路,可以在不通知GUI的情况下删除和创建代理,因此单独访问它们不是正确的做法。视图中的策略是通过模型传递信息,在这种情况下,当您将获得python中图像路径的信息时,建议基于QAbstractListModel创建一个模型:

main.py

从PyQt5导入QtCore、QtGui、QtWidgets、QtQuickWidgets
类ImageModel(QtCore.QAbstractListModel):
PathRole=QtCore.Qt.UserRole+1
def uuu init uuu(self,parent=None):
超级(ImageModel,self)。\uuuuu初始化\uuuuuuu(父级)
self._路径=[]
def addPath(自身,路径):
self.beginInsertRows(
QtCore.QModelIndex(),self.rowCount(),self.rowCount()
)
self.\u paths.append(路径)
self.endInsertRows()
def行数(self,parent=QtCore.QModelIndex()):
返回len(自身路径)
def数据(self,index,role=QtCore.Qt.DisplayRole):

如果role==ImageModel.PathRole和0您走错了路,那么可以在不通知GUI的情况下删除和创建代理,因此单独访问它们不是正确的做法。视图中的策略是通过模型传递信息,在这种情况下,当您将获得python中图像路径的信息时,建议基于QAbstractListModel创建一个模型:

main.py

从PyQt5导入QtCore、QtGui、QtWidgets、QtQuickWidgets
类ImageModel(QtCore.QAbstractListModel):
PathRole=QtCore.Qt.UserRole+1
def uuu init uuu(self,parent=None):
超级(ImageModel,self)。\uuuuu初始化\uuuuuuu(父级)
self._路径=[]
def addPath(自身,路径):
self.beginInsertRows(
QtCore.QModelIndex(),self.rowCount(),self.rowCount()
)
self.\u paths.append(路径)
self.endInsertRows()
def行数(self,parent=QtCore.QModelIndex()):
返回len(自身路径)
def数据(self,index,role=QtCore.Qt.DisplayRole):

如果role==ImageModel.PathRole和0谢谢@EylanEsc,但是如果我不使用QAbstractListModel,你能提供一些答案吗?@dimatronciu如果你检查我的代码,有两个答案:1)使用QAbstractListModel和2)使用QStandardintemModel谢谢@EylanEsc,但是如果我不使用QAbstractListModel,你能提供一些答案吗?@dimatronciu如果你检查我的代码,有两个答案:1)使用QAbstractListModel,2)使用QStandardItemModel
import QtQuick 2.12

Rectangle{
    width: 640
    height: 480

    ListView { 
        anchors.fill: parent
        model: pathmodel
        delegate: Rectangle {
            width: 100
            height: 100
            Image {
                anchors.fill: parent
                source: Qt.resolvedUrl(model.path)
            }
        }
    }
}