Я не могу заставить работать работающих по умолчанию делегатов, но вы можете создать собственные делегаты и затем установить для них нужные столбцы в QTableview
Сначала создайте делегатов:
class LineEditDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(self, QWidget, QStyleOptionViewItem, QModelIndex):
return QtWidgets.QLineEdit(QWidget)
def setEditorData(self, QWidget, QModelIndex):
try:
value = QModelIndex.model().data(QModelIndex, QtCore.Qt.EditRole)
QWidget.setText(value)
except:
QWidget.setText("")
def setModelData(self, QWidget, QAbstractItemModel, QModelIndex):
try:
value = QWidget.text()
QAbstractItemModel.setData(QModelIndex, value, QtCore.Qt.EditRole)
except:
QAbstractItemModel.setData(QModelIndex, "", QtCore.Qt.EditRole)
def updateEditorGeometry(self, QWidget, QStyleOptionViewItem, QModelIndex):
QWidget.setGeometry(QStyleOptionViewItem.rect)
class SpinBoxDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(self, QWidget, QStyleOptionViewItem, QModelIndex):
return QtWidgets.QSpinBox(QWidget)
def setEditorData(self, QWidget, QModelIndex):
try:
value = QModelIndex.model().data(QModelIndex, QtCore.Qt.EditRole)
QWidget.setValue(value)
except:
QWidget.setValue(0)
def setModelData(self, QWidget, QAbstractItemModel, QModelIndex):
try:
value = QWidget.value()
QAbstractItemModel.setData(QModelIndex, value, QtCore.Qt.EditRole)
except:
QAbstractItemModel.setData(QModelIndex, 0, QtCore.Qt.EditRole)
def updateEditorGeometry(self, QWidget, QStyleOptionViewItem, QModelIndex):
QWidget.setGeometry(QStyleOptionViewItem.rect)
Затем установите делегатов в столбцы QTableview
class Controller(QtWidgets.QMainWindow):
def __init__(self, parent):
...
lineEditDelegate = LineEditDelegate(self.__ui.tableView)
spinBoxDelegate = SpinBoxDelegate(self.__ui.tableView)
self.__ui.tableView.setItemDelegateForColumn(1, lineEditDelegate)
self.__ui.tableView.setItemDelegateForColumn(5, spinBoxDelegate)
...
Пользовательские делегаты должны теперь отображаться как ожидалось