Source code for SDF.GUI.browser.parameter_popup

from typing import Optional, Iterable

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QTreeWidget, QWidget, QTreeWidgetItem, QHBoxLayout

from SDF.data_model import ParameterType, ParameterSet, Parameter


[docs]class ParameterPopup(QWidget): def __init__(self, parent: QWidget, title: str, parameters: Iterable[ParameterType]): # Qt.Window in combination with a parent makes this widget a secondary window. # Secondary windows are closed when the parent is closed # (see https://doc.qt.io/qt-5/application-windows.html#primary-and-secondary-windows) # QTreeWidget is no QWidget subclass and thus cannot take this flag, so this class is a QWidget with a # QTreeWidget as its only content super().__init__(parent, Qt.Window) self.setLayout(QHBoxLayout()) self.setWindowTitle(title) self.treewidget = QTreeWidget() self.treewidget.setColumnCount(2) self.treewidget.setHeaderLabels(["Name", "Value"]) self.layout().addWidget(self.treewidget) for par in parameters: self.treewidget.addTopLevelItem(self.__par_to_item(par, parent=None)) @staticmethod def __par_to_item(par: ParameterType, parent: Optional[QTreeWidgetItem]): if isinstance(par, ParameterSet): item = QTreeWidgetItem(parent, [par.name, ""]) for child in par: item.addChild(ParameterPopup.__par_to_item(child, parent=item)) else: value_str = par.value if par.unit is not None: value_str += f" (unit: '{par.unit}')" item = QTreeWidgetItem(parent, [par.name, value_str]) return item