import sys from PySide6 import QtGui, QtCore, QtWidgets class TestWindow(QtWidgets.QMainWindow): def __init__(self): super(TestWindow, self).__init__() self.setWindowTitle("TestTreeView") def setWidget(self, widget): self.setCentralWidget(widget) class TestEditDelegate(QtWidgets.QStyledItemDelegate): def __init__(self) -> None: super().__init__() self.padding = 3 def createEditor(self, parent, option, index): lineEdit = QtWidgets.QLineEdit(parent) return lineEdit def sizeHint(self, option, index): size = super().sizeHint(option, index) return QtCore.QSize(size.width()+self.padding*2, size.height()+self.padding*2) class TreeModelTest(QtGui.QStandardItemModel): def __init__(self) -> None: super().__init__() class WidgetTest(QtWidgets.QTreeView): def __init__(self): super().__init__() self._model = TreeModelTest() self._model.setColumnCount(2) self.setHeaderHidden(True) self.setModel(self._model) self.setUniformRowHeights(True) self.setItemDelegateForColumn(1, TestEditDelegate()) def addItem(self, text): item = QtGui.QStandardItem() item.setFlags(item.flags() & ~(QtCore.Qt.ItemIsEditable)) item.setData(text, QtCore.Qt.DisplayRole) self._model.appendRow(item) index = self._model.index(self._model.rowCount()-1, 1) self.openPersistentEditor(index) def loadStyleSheet(qssFile: str) -> str: qssData = None with open(qssFile, mode="rt", encoding="utf-8") as f: qssData = f.read() return qssData if (__name__ == "__main__"): app = QtWidgets.QApplication(sys.argv) app.setStyleSheet(loadStyleSheet("stylesheet.qss")) dialog = TestWindow() dialog.show() test = WidgetTest() dialog.setWidget(test) for i in range(0, 10): test.addItem(f"TestItem_{i}") sys.exit(app.exec())