This solution works for me and hides the extension entirely from the user.
Override data
and setData
in QFileSystemModel
class.
def data(self, index, role):
if role == Qt.EditRole:
return self.fileName(index)
else:
return super(ContentFileSystemModel, self).data(index, role)
def setData(self, index: QModelIndex, value, role: int=...) -> bool:
print("setData")
if role == Qt.EditRole:
if self.isDir(index):
d = ""
else:
d = "."
return super(ContentFileSystemModel, self).setData(index, str(value) + d + self.fileInfo(index).completeSuffix(), role)
return super(ContentFileSystemModel, self).setData(index, value, role)
Create a QStyledItemDelegate
:
class NameDelegate(QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
if isinstance(index.model(), QFileSystemModel):
if not index.model().isDir(index):
option.text = index.model().fileInfo(index).baseName()
def setEditorData(self, editor, index):
if isinstance(index.model(), QFileSystemModel):
if not index.model().isDir(index):
editor.setText(index.model().fileInfo(index).baseName())
else:
super().setEditorData(editor, index)
And set it in your view:
delegate = NameDelegate(self.lv_file_manager)
view.setItemDelegate(delegate)