Skip to content

Instantly share code, notes, and snippets.

@ben-hearn-sb
Created August 29, 2023 21:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ben-hearn-sb/cf7c8cc2db69897e4ebd2e085ca0a4b5 to your computer and use it in GitHub Desktop.
Save ben-hearn-sb/cf7c8cc2db69897e4ebd2e085ca0a4b5 to your computer and use it in GitHub Desktop.
test_tree.py
from PySide6 import QtCore
class TreeItem:
def __init__(self, data, parent=None):
self.parent_item = parent
self.item_data = data
self.child_items = []
def appendChild(self, item):
self.child_items.append(item)
def child(self, row):
return self.child_items[row]
def childCount(self):
return len(self.child_items)
def columnCount(self):
return len(self.item_data)
def data(self, column):
if column < len(self.item_data):
return self.item_data[column]
return None
def row(self):
if self.parent_item:
return self.parent_item.child_items.index(self)
return 0
class TreeModel(QtCore.QAbstractItemModel):
def __init__(self, data, parent=None):
super().__init__(parent)
self.root_item = TreeItem(["Title", "Description"])
self.setupModelData(data, self.root_item)
def setupModelData(self, data, parent):
for item in data:
parent.appendChild(TreeItem(item, parent))
def index(self, row, column, parent=QtCore.QModelIndex()):
if not self.hasIndex(row, column, parent):
return QtCore.QModelIndex()
if not parent.isValid():
parent_item = self.root_item
else:
parent_item = parent.internalPointer()
child_item = parent_item.child(row)
if child_item:
return self.createIndex(row, column, child_item)
return QtCore.QModelIndex()
def parent(self, index):
if not index.isValid():
return QtCore.QModelIndex()
child_item = index.internalPointer()
parent_item = child_item.parent_item
if parent_item == self.root_item:
return QtCore.QModelIndex()
return self.createIndex(parent_item.row(), 0, parent_item)
def rowCount(self, parent=QtCore.QModelIndex()):
if parent.column() > 0:
return 0
if not parent.isValid():
parent_item = self.root_item
else:
parent_item = parent.internalPointer()
return parent_item.childCount()
def columnCount(self, parent=QtCore.QModelIndex()):
return self.root_item.columnCount()
def data(self, index, role=QtCore.Qt.DisplayRole):
if not index.isValid():
return None
if role == QtCore.Qt.DisplayRole:
item = index.internalPointer()
return item.data(index.column())
return None
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment