在上篇 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)