使用pyqt5的tableview的view model 委托对数据读取写入的示例代码
时间: 2023-05-21 20:04:40 浏览: 55
当然可以,以下是一个简单的示例:
```python
from PyQt5 import QtWidgets, QtCore
class MyDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(self, parent, option, index):
editor = QtWidgets.QLineEdit(parent)
return editor
def setEditorData(self, editor, index):
value = index.model().data(index, QtCore.Qt.DisplayRole)
editor.setText(str(value))
def setModelData(self, editor, model, index):
value = editor.text()
model.setData(index, value, QtCore.Qt.EditRole)
class MyTableModel(QtCore.QAbstractTableModel):
def __init__(self, data):
super().__init__()
self._data = data
def data(self, index, role):
if role == QtCore.Qt.DisplayRole:
return self._data[index.row()][index.column()]
def setData(self, index, value, role=QtCore.Qt.EditRole):
if role == QtCore.Qt.EditRole:
self._data[index.row()][index.column()] = value
self.dataChanged.emit(index, index)
return True
return False
def rowCount(self, parent):
return len(self._data)
def columnCount(self, parent):
return len(self._data[0])
if __name__ == '__main__':
import sys
data = [[1, 2], [3, 4]]
app = QtWidgets.QApplication(sys.argv)
view = QtWidgets.QTableView()
model = MyTableModel(data)
view.setModel(model)
delegate = MyDelegate()
view.setItemDelegate(delegate)
view.show()
sys.exit(app.exec_())
```