Source code for districtheatingsim.gui.NetSimulationTab.diameter_optimization_tab
"""Diameter Optimization Tab Module
================================
UI tab for pipe diameter optimization settings in district heating networks.
:author: Dipl.-Ing. (FH) Jonas Pfeiffer
"""
from PyQt6.QtWidgets import QVBoxLayout, QLineEdit, QLabel, QComboBox, QWidget, QHBoxLayout, QCheckBox, QGroupBox
[docs]
class DiameterOptimizationTab(QWidget):
"""
Widget for configuring pipe diameter optimization parameters.
"""
[docs]
def __init__(self, dialog_config, parent=None):
"""
Initialize diameter optimization tab.
:param dialog_config: Configuration data for dialog settings.
:type dialog_config: dict
:param parent: Parent widget.
:type parent: QWidget
"""
super().__init__(parent)
self.dialog_config = dialog_config
self.initUI()
[docs]
def initUI(self):
"""
Initialize user interface components.
"""
layout = QVBoxLayout(self)
OptDiameterGroup = QGroupBox("Durchmesseroptimierung im Netz")
OptDiameterGroup.setStyleSheet("QGroupBox { font-size: 11pt; font-weight: bold; }")
OptDiameterLayout = QVBoxLayout()
OptDiameterLayout.addLayout(self.createDiameterOptCheckbox())
OptDiameterLayout.addLayout(self.createDiameterOptInput())
OptDiameterGroup.setLayout(OptDiameterLayout)
layout.addWidget(OptDiameterGroup)
# Update der Sichtbarkeit
self.updateInputFieldsVisibility()
[docs]
def createDiameterOptCheckbox(self):
"""
Create checkbox for enabling diameter optimization.
:return: Layout containing checkbox.
:rtype: QVBoxLayout
"""
layout = QVBoxLayout()
self.DiameterOptCheckbox = QCheckBox("Durchmesser optimieren.")
layout.addWidget(self.DiameterOptCheckbox)
self.DiameterOptCheckbox.setChecked(True)
self.DiameterOptCheckbox.stateChanged.connect(self.updateInputFieldsVisibility)
return layout
[docs]
def createDiameterOptInput(self):
"""
Create input fields for diameter optimization parameters.
:return: Layout containing input fields.
:rtype: QVBoxLayout
"""
layout = QVBoxLayout()
layout.addWidget(QLabel("Eingaben zur Durchmesseroptimierung der Rohrleitungen:"))
row_layout = QHBoxLayout()
self.v_max_pipelabel = QLabel("Maximale Strömungsgeschwindigkeit Leitungen:")
self.v_max_pipeInput = QLineEdit(str(self.dialog_config["diameter_optimization"]["v_max_pipe"]))
row_layout.addWidget(self.v_max_pipelabel)
row_layout.addWidget(self.v_max_pipeInput)
layout.addLayout(row_layout)
self.material_filterInput = QComboBox(self)
self.material_filterInput.addItems(self.dialog_config["diameter_optimization"]["material_filter"])
layout.addWidget(self.material_filterInput)
self.material_filterInput.currentIndexChanged.connect(self.updateInputFieldsVisibility)
row_layout2 = QHBoxLayout()
self.k_mm_Label = QLabel("Rauigkeit der Rohrleitungen:")
self.k_mm_Input = QLineEdit(str(self.dialog_config["diameter_optimization"]["k_mm"]))
row_layout2.addWidget(self.k_mm_Label)
row_layout2.addWidget(self.k_mm_Input)
layout.addLayout(row_layout2)
return layout
[docs]
def updateInputFieldsVisibility(self):
"""
Update visibility of input fields based on checkbox state.
"""
self.DiameterOpt_ckecked = self.DiameterOptCheckbox.isChecked()
# Anzeige Optimierungsoptionen
self.v_max_pipelabel.setVisible(self.DiameterOpt_ckecked)
self.v_max_pipeInput.setVisible(self.DiameterOpt_ckecked)
self.material_filterInput.setVisible(self.DiameterOpt_ckecked)
self.k_mm_Label.setVisible(self.DiameterOpt_ckecked)
self.k_mm_Input.setVisible(self.DiameterOpt_ckecked)
[docs]
def getValues(self):
"""
Get current parameter values from input fields.
:return: Dictionary containing diameter optimization parameters.
:rtype: dict
"""
return {
"diameter_optimization_enabled": self.DiameterOptCheckbox.isChecked(),
"v_max_pipe": float(self.v_max_pipeInput.text()),
"material_filter": self.material_filterInput.currentText(),
"k_mm": float(self.k_mm_Input.text())
}