from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QGridLayout, QTreeWidget, QTreeWidgetItem class ChunkPanel(QWidget): def __init__(self, parent): super().__init__(parent) self.parent = parent layout = QVBoxLayout(self) self.chunkInfoLabel = QLabel("Tile Information") layout.addWidget(self.chunkInfoLabel) # Nav buttons grid = QGridLayout() self.btnUp = QPushButton("U") self.btnN = QPushButton("N") self.btnDown = QPushButton("D") self.btnW = QPushButton("W") self.btnS = QPushButton("S") self.btnE = QPushButton("E") grid.addWidget(self.btnUp, 0, 0) grid.addWidget(self.btnN, 0, 1) grid.addWidget(self.btnDown, 0, 2) grid.addWidget(self.btnW, 1, 0) grid.addWidget(self.btnS, 1, 1) grid.addWidget(self.btnE, 1, 2) layout.addLayout(grid) # Add expandable tree list self.tree = QTreeWidget() self.tree.setHeaderLabel("Chunks") # Example tree items parentItem = QTreeWidgetItem(self.tree, ["Chunk 1"]) childItem1 = QTreeWidgetItem(parentItem, ["Tile A"]) childItem2 = QTreeWidgetItem(parentItem, ["Tile B"]) parentItem2 = QTreeWidgetItem(self.tree, ["Chunk 2"]) QTreeWidgetItem(parentItem2, ["Tile C"]) QTreeWidgetItem(parentItem2, ["Tile D"]) self.tree.expandAll() # Expand by default, remove if you want collapsed layout.addWidget(self.tree) # Removed invalid stretch factor # Add stretch so tree expands layout.setStretchFactor(grid, 0) layout.setStretchFactor(self.tree, 1) # Event subscriptions self.btnN.clicked.connect(lambda: self.parent.map.moveRelative(0, -1, 0)) self.btnS.clicked.connect(lambda: self.parent.map.moveRelative(0, 1, 0)) self.btnE.clicked.connect(lambda: self.parent.map.moveRelative(1, 0, 0)) self.btnW.clicked.connect(lambda: self.parent.map.moveRelative(-1, 0, 0)) self.btnUp.clicked.connect(lambda: self.parent.map.moveRelative(0, 0, 1)) self.btnDown.clicked.connect(lambda: self.parent.map.moveRelative(0, 0, -1))