[Python] make treeWidget editable for specific row and column

Discussão em 'Python' iniciado por Stack, Janeiro 23, 2025.

  1. Stack

    Stack Membro Participativo

    I'm new to pyqt6 and I wanted to play around, learn and explore the possibilities. For that I created a spimple main frame with dummy data and a treeWidget.

    import sys
    from PyQt6.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget

    class MainWindow(QMainWindow):
    def __init__(self):
    super().__init__()

    # Set up the window
    self.setWindowTitle("QTreeWidget Example")
    self.setGeometry(100, 100, 800, 600)

    # Create the QTreeWidget
    tree_widget = QTreeWidget(self)
    tree_widget.setColumnCount(6) # Set the number of columns
    tree_widget.setHeaderLabels(["Col1", "Col2", "Col3", "Col4", "Col5", "Col6"])

    # Add some parent rows and child rows with dummy data
    root1 = QTreeWidgetItem(tree_widget, ["Root1", "Data1", "Data2", "Data3", "Data4", "Data5"])
    child1 = QTreeWidgetItem(root1, ["Child1", "DataA", "DataB", "DataC", "DataD", "DataE"])
    child2 = QTreeWidgetItem(root1, ["Child2", "DataX", "DataY", "DataZ", "DataW", "DataV"])

    root2 = QTreeWidgetItem(tree_widget, ["Root2", "Info1", "Info2", "Info3", "Info4", "Info5"])
    child3 = QTreeWidgetItem(root2, ["Child3", "DetailA", "DetailB", "DetailC", "DetailD", "DetailE"])
    child4 = QTreeWidgetItem(root2, ["Child4", "DetailX", "DetailY", "DetailZ", "DetailW", "DetailV"])

    root3 = QTreeWidgetItem(tree_widget, ["Root3", "Example1", "Example2", "Example3", "Example4", "Example5"])
    child5 = QTreeWidgetItem(root3, ["Child5", "SubDataA", "SubDataB", "SubDataC", "SubDataD", "SubDataE"])
    child6 = QTreeWidgetItem(root3, ["Child6", "SubDataX", "SubDataY", "SubDataZ", "SubDataW", "SubDataV"])

    root4 = QTreeWidgetItem(tree_widget, ["Root4", "Sample1", "Sample2", "Sample3", "Sample4", "Sample5"])
    child7 = QTreeWidgetItem(root4, ["Child7", "PartA", "PartB", "PartC", "PartD", "PartE"])
    child8 = QTreeWidgetItem(root4, ["Child8", "PartX", "PartY", "PartZ", "PartW", "PartV"])

    root5 = QTreeWidgetItem(tree_widget, ["Root5", "Test1", "Test2", "Test3", "Test4", "Test5"])
    child9 = QTreeWidgetItem(root5, ["Child9", "ItemA", "ItemB", "ItemC", "ItemD", "ItemE"])
    child10 = QTreeWidgetItem(root5, ["Child10", "ItemX", "ItemY", "ItemZ", "ItemW", "ItemV"])

    # Layout setup
    layout = QVBoxLayout()
    layout.addWidget(tree_widget)

    # Set up the central widget
    central_widget = QWidget(self)
    central_widget.setLayout(layout)
    self.setCentralWidget(central_widget)

    # Main application entry
    if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())


    I could manage to make the treeWidget editable with some flags.

    Is it possible to make the treeView inplace editable e.g. for all root rows in column2 and column3? Or e.g. for all child rows only the last column?

    Continue reading...

Compartilhe esta Página