Buy Me a Coffee? Your support is much appreciated!

PayPal Me: https://www.paypal.me/jiejenn/5
Venmo: @Jie-Jenn

Source Code: 

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QTreeWidget, QTreeWidgetItem, \
                            QHBoxLayout, QVBoxLayout, QItemDelegate
from PyQt6.QtCore import Qt, QRegularExpression #QRegExp
from PyQt6.QtGui import QRegularExpressionValidator

class TreeWidgetDelegate(QItemDelegate):
    def createEditor(self, parent, option, index):
        editor = QLineEdit(parent=parent)
        pattern = '[A-z0-9]+'
        reg = QRegularExpression(pattern)
        reg_validator = QRegularExpressionValidator(reg)
        editor.setValidator(reg_validator)
        return editor

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.window_width, self.window_height = 700, 500
        self.resize(self.window_width, self.window_height)

        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        self.tree = QTreeWidget()
        self.tree.itemDoubleClicked.connect(self.rename_value)
        self.layout.addWidget(self.tree)

        for i in range(5):
            item = QTreeWidgetItem([str(i)*3])
            self.tree.addTopLevelItem(item)

        delegate = TreeWidgetDelegate()
        self.tree.setItemDelegate(delegate)

    def rename_value(self):
        item = self.tree.selectedItems()
        if item:
            item = item[0]
            item.setFlags(item.flags() | Qt.ItemFlags.ItemIsEditable)


if __name__ == '__main__':
    # don't auto scale when drag app to a different monitor.
    # QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
    
    app = QApplication(sys.argv)
    app.setStyleSheet('''
        QWidget {
            font-size: 17px;
        }
    ''')
    
    myApp = MyApp()
    myApp.show()

    try:
        sys.exit(app.exec())
    except SystemExit:
        print('Closing Window...')