Удалить значение в ячейке TableView в которой используется делегат, при этом чтобы поле ячейки осталось пустое
Как добиться того, чтобы при удалении значения в ячейке в которой используется делегат SpinBox, зафиксировать поле пустым.
По такому алгоритм:
-Двойной клик по ячейке -появляется значение SpinBox по умолчанию
-Нажимаю Del - удаляется значение, поле ячейки пустое
-Нажимаю Enter - ячейка должна остаться пустая.
Минимальный пример
import sys
from PyQt5.Qt import
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtWidgets import QStyledItemDelegate, QSpinBox
from PyQt5.QtCore import (Qt, QAbstractTableModel, QModelIndex)
class Delegate(QStyledItemDelegate):
signal_delegate = QtCore.pyqtSignal(int, int)
def createEditor(self, parent, options, index):
editor = QSpinBox(parent)
editor.valueChanged.connect(lambda val, row=index.row(): self.update_editor(val, row))
return editor
def setEditorData(self, editor, index):
try:
value = index.model().data(index, Qt.EditRole)
editor.setValue(int(value))
except TypeError:
pass
def updateEditorGeometry(self, editor, options, index):
editor.setGeometry(options.rect)
def setModelData(self, editor, model, index):
value = str(editor.value())
model.setData(index, value, Qt.EditRole)
def update_editor(self, val, row):
self.signal_delegate.emit(val, row)
class MyDelegateInTableView(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.table = QtWidgets.QTableView()
self.sim = QtGui.QStandardItemModel(1,1)
self.table.setModel(self.sim)
boxMain = QtWidgets.QVBoxLayout()
boxMain.addWidget(self.table)
self.setLayout(boxMain)
delegate = Delegate(self)
self.table.setItemDelegateForColumn(0, delegate)
if __name__ == '__main__':
app = QApplication(sys.argv)
windowExample = MyDelegateInTableView()
windowExample.show()
sys.exit(app.exec_())