Forked from ben-hearn-sb/gist:cf7c8cc2db69897e4ebd2e085ca0a4b5
Created
November 18, 2023 07:33
-
-
Save AnthoniG/ebc87357aedf3c4159024112ee1e36da to your computer and use it in GitHub Desktop.
test_tree.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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