PyQt5使用记录之三 —— MVD模式中的委托定义与使用

    在上篇 PyQt5使用记录之二 —— QTableView实现数据的显示、编辑、删除与添加 中使用了QTableView与QStandardTableModel结合,实现了数据的CRUD,但数据的显示与编辑界面都是使用默认的委托来实现的,本篇记录下,结合自定义委托,实现自定义数据的显示与编辑。

    使用自定义委托,一般自定义一个继承自PyQt5.QtWidgets.QStyledItemDelegate的类,同时必须实现以下三个方法:

1.createEditor(self,parent,option,index) 用于创建数据编辑界面所用的部件(文本框、下拉列表框等)

2.setEditorData(self,editor,index)  用于从模型获取编辑前的原数据,并加载至编辑部件

3.setModelData(self,editor,model,index)  当编辑结束时,调用其实现将修改后的数据更新至数据库。其实,它是通过调用Model中的setData()实现数据的更新。

    以下是基本的代码实现:

class MyDelegate(QStyledItemDelegate):

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

    def createEditor(self,parent,option,index):
        wdgt = QLineEdit(parent)
        return wdgt

    def setEditorData(self,editor,index):
        value = index.model().data(index,Qt.DisplayRole)
        editor.setText(str(value))

    def setModelData(self,editor,model,index):
        model.setData(index,editor.text())

    其应用方法是,实例化类之后,调用QTableView类实例的setItemDelegate(delegate)、setItemDelegateForColumn(column_seq,delegate)、setItemDelegateForRow(column_seq,delegate)方法,分别将自定义委托应用于单个单元、一列或一行。

    比如:

md = MyDelegate()
tabview.setItemDelegateForColumn(2,md)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值