Source code for pyleecan.GUI.Tools.TreeView

# -*- coding: utf-8 -*-

from PySide2 import QtCore, QtGui, QtWidgets

# === TreeView ========================================================================
[docs]class TreeView(QtWidgets.QTreeView): def __init__(self): super(TreeView, self).__init__() # self.__typeWidgets = {} # self.__typeWrappers = {} model = QtGui.QStandardItemModel(0, 1) model.setHorizontalHeaderLabels( ["Name", "Value", "Unit", "Class", "Description"] ) self.rootNode = model.invisibleRootItem() self.setModel(model) self.setColumnWidth(0, 150) self.setAlternatingRowColors(True)
[docs] def generate(self, data, parent=None): if parent is None: parent = self.rootNode self.rootNode.removeRows(0, self.rootNode.rowCount()) if hasattr(data, "as_dict"): self.generate_branch(data, parent) else: pass
[docs] def generate_branch(self, data, parent): for attr in data.as_dict(): if attr[0] != "_": _attr = getattr(data, attr) # pyleecan object attributes if hasattr(_attr, "as_dict"): branch = QtGui.QStandardItem(attr) branch.setEditable(False) value = QtGui.QStandardItem("") value.setEditable(False) unit = QtGui.QStandardItem("") cls_name = QtGui.QStandardItem(type(_attr).__name__) # class description rathern than attribure description cls_doc = ( getattr(type(data), attr).__doc__ if _attr.__doc__ is None else _attr.__doc__ ) cls_doc = QtGui.QStandardItem(cls_doc) parent.appendRow([branch, value, unit, cls_name, cls_doc]) self.generate(_attr, parent=branch) # float, int, str attributes elif isinstance(_attr, (float, int, str)): attribute = QtGui.QStandardItem(attr) attribute.setEditable(False) value = QtGui.QStandardItem(str(getattr(data, attr))) value.setEditable(False) unit = QtGui.QStandardItem("na") cls_name = QtGui.QStandardItem(type(_attr).__name__) cls_doc = getattr( type(data), attr ).__doc__ # tc.__class__.prop.__doc__ cls_doc = QtGui.QStandardItem(cls_doc) parent.appendRow([attribute, value, unit, cls_name, cls_doc]) # todo: list, dict, ndarray attributes else: pass