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

您得到的错误是由以下代码行引起的:self.persons = self.persons.append({'name': 'peter', 'age': 22})

这是因为append函数不返回任何内容,所以它本打算将None赋值给个人在

要插入新数据,必须调用beginInsertRows()和endInsertRows()通知视图更改。在

数据方法必须与文件中显示的方法相同,即必须具有以下格式:

^{pr2}$

rowCount方法也一样:def rowCount(self, parent=QModelIndex()):

我实现了addPerson、editPerson和deletePerson方法,分别从列表中添加、编辑和删除数据。我还向.qml添加了必要的项,以便能够对其进行测试。在

model2.pyfrom PyQt5.QtCore import QAbstractListModel, Qt, pyqtSignal, pyqtSlot, QModelIndex

class PersonModel(QAbstractListModel):

NameRole = Qt.UserRole + 1

AgeRole = Qt.UserRole + 2

personChanged = pyqtSignal()

def __init__(self, parent=None):

super().__init__(parent)

self.persons = [

{'name': 'jon', 'age': 20},

{'name': 'jane', 'age': 25}

]

def data(self, index, role=Qt.DisplayRole):

row = index.row()

if role == PersonModel.NameRole:

return self.persons[row]["name"]

if role == PersonModel.AgeRole:

return self.persons[row]["age"]

def rowCount(self, parent=QModelIndex()):

return len(self.persons)

def roleNames(self):

return {

PersonModel.NameRole: b'name',

PersonModel.AgeRole: b'age'

}

@pyqtSlot(str, int)

def addPerson(self, name, age):

self.beginInsertRows(QModelIndex(), self.rowCount(), self.rowCount())

self.persons.append({'name': name, 'age': age})

self.endInsertRows()

@pyqtSlot(int, str, int)

def editPerson(self, row, name, age):

ix = self.index(row, 0)

self.persons[row] = {'name': name, 'age': age}

self.dataChanged.emit(ix, ix, self.roleNames())

@pyqtSlot(int)

def deletePerson(self, row):

self.beginRemoveColumns(QModelIndex(), row, row)

del self.persons[row]

self.endRemoveRows()

test2.qmlimport QtQuick 2.6

import QtQuick.Controls 2.2

Rectangle {

anchors.fill: parent

color: "lightgrey"

ListView {

id: listExample

anchors.fill: parent

model: PersonModel

delegate:

Item {

width: 200

height: 60

Row {

Text {

width: 60

text: name + " " + age

horizontalAlignment: Text.AlignHCenter

anchors.verticalCenter: parent.verticalCenter

}

Button{

width: 20

text: "+"

onClicked: PersonModel.editPerson(index, name, age+1)

}

Button{

width: 20

text: "-"

onClicked: PersonModel.editPerson(index, name, age-1)

}

Button{

width: 20

text: "X"

onClicked: PersonModel.deletePerson(index)

}

}

}

}

Button {

width: 50

height: 25

anchors.bottom: parent.bottom

anchors.right: parent.right

text: "add"

onClicked: {

console.log("qml adding")

PersonModel.addPerson("luis", 22)

}

}

}

编辑:

.py@pyqtSlot(int, str, int)

def insertPerson(self, row, name, age):

self.beginInsertRows(QModelIndex(), row, row)

self.persons.insert(row, {'name': name, 'age': age})

self.endInsertRows()

.qmlPersonModel.insertPerson(2, "luis", 1111)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值