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)

你可能感兴趣的:(python)