Source code for districtheatingsim.gui.dialogs

"""GUI Dialogs Module
==================

Dialog windows for user input and configuration.

:author: Dipl.-Ing. (FH) Jonas Pfeiffer
"""

from PyQt6.QtWidgets import QVBoxLayout, QLineEdit, QLabel, QDialog, QPushButton, QHBoxLayout, QFileDialog, QCheckBox, QDialogButtonBox, QHBoxLayout
from PyQt6.QtCore import Qt

from districtheatingsim.utilities.utilities import get_resource_path

[docs] class TemperatureDataDialog(QDialog): """ Dialog for selecting TRY (Test Reference Year) weather data files. .. note:: Simple file selection dialog for weather data input with default path. """
[docs] def __init__(self, parent=None): """ Initialize temperature data dialog. :param parent: Parent widget, defaults to None :type parent: QWidget, optional """ super().__init__(parent) self.initUI()
[docs] def initUI(self): """ Initialize the user interface components with file selection controls. .. note:: Creates description label with DWD link, file input field with default TRY path, and OK/Cancel buttons. """ self.setWindowTitle("Testreferenzjahr-Datei auswählen") self.resize(600, 200) self.main_layout = QVBoxLayout(self) # Description label with DWD link self.descriptionLabel = QLabel( "Bitte wählen Sie die Datei des Testreferenzjahres (TRY) aus, die Sie verwenden möchten.<br>" "Testreferenzjahre können unter <a href='https://www.dwd.de/DE/leistungen/testreferenzjahre/testreferenzjahre.html'>" "https://www.dwd.de/DE/leistungen/testreferenzjahre/testreferenzjahre.html</a> bezogen werden.<br>" "Es ist jedoch eine Registrierung beim DWD notwendig", self) self.descriptionLabel.setWordWrap(True) self.descriptionLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) self.main_layout.addWidget(self.descriptionLabel) # File input controls self.input_layout = QHBoxLayout() self.temperatureDataFileLabel = QLabel("TRY-Datei:", self) self.temperatureDataFileInput = QLineEdit(self) self.temperatureDataFileInput.setText(get_resource_path("data\\TRY\\TRY_511676144222\\TRY2015_511676144222_Jahr.dat")) self.selectTRYFileButton = QPushButton('TRY-Datei auswählen') self.selectTRYFileButton.clicked.connect(lambda: self.selectFilename(self.temperatureDataFileInput)) self.input_layout.addWidget(self.temperatureDataFileLabel) self.input_layout.addWidget(self.temperatureDataFileInput) self.input_layout.addWidget(self.selectTRYFileButton) self.main_layout.addLayout(self.input_layout) # OK/Cancel buttons self.buttonLayout = QHBoxLayout() okButton = QPushButton("OK", self) cancelButton = QPushButton("Abbrechen", self) okButton.clicked.connect(self.accept) cancelButton.clicked.connect(self.reject) self.buttonLayout.addWidget(okButton) self.buttonLayout.addWidget(cancelButton) self.main_layout.addLayout(self.buttonLayout)
[docs] def selectFilename(self, lineEdit): """ Open file dialog and set selected path to line edit. :param lineEdit: Target line edit widget :type lineEdit: QLineEdit """ filename, _ = QFileDialog.getOpenFileName(self, "Datei auswählen") if filename: lineEdit.setText(filename)
[docs] def getValues(self): """ Get dialog values. :return: Dictionary with TRY filename :rtype: dict """ return { 'TRY-filename': self.temperatureDataFileInput.text() }
[docs] class HeatPumpDataDialog(QDialog): """ Dialog for selecting heat pump COP data files. .. note:: Simple file selection dialog for heat pump performance data. """
[docs] def __init__(self, parent=None): """ Initialize heat pump data dialog. :param parent: Parent widget, defaults to None :type parent: QWidget, optional """ super().__init__(parent) self.setWindowTitle("Wärmepumpendaten") self.initUI()
[docs] def initUI(self): """ Initialize the user interface components with COP file selection. .. note:: Creates file input field with default COP data path and OK/Cancel buttons. """ self.setWindowTitle("COP-Daten-Verwaltung") self.resize(400, 200) mainLayout = QVBoxLayout(self) # File input controls dataLayout = QVBoxLayout() self.heatPumpDataFileLabel = QLabel("csv-Datei mit Wärmepumpenkennfeld:") self.heatPumpDataFileInput = QLineEdit() self.heatPumpDataFileInput.setText(get_resource_path("data/COP/Kennlinien WP.csv")) self.selectCOPFileButton = QPushButton('csv-Datei auswählen') self.selectCOPFileButton.clicked.connect(lambda: self.selectFilename(self.heatPumpDataFileInput)) dataLayout.addWidget(self.heatPumpDataFileLabel) dataLayout.addWidget(self.heatPumpDataFileInput) dataLayout.addWidget(self.selectCOPFileButton) mainLayout.addLayout(dataLayout) # OK/Cancel buttons buttonLayout = QHBoxLayout() okButton = QPushButton("OK") cancelButton = QPushButton("Abbrechen") okButton.clicked.connect(self.accept) cancelButton.clicked.connect(self.reject) buttonLayout.addWidget(okButton) buttonLayout.addWidget(cancelButton) mainLayout.addLayout(buttonLayout) self.setLayout(mainLayout)
[docs] def selectFilename(self, lineEdit): """ Open file dialog and set selected path to line edit. :param lineEdit: Target line edit widget :type lineEdit: QLineEdit """ filename, _ = QFileDialog.getOpenFileName(self, "Datei auswählen", "", "CSV-Dateien (*.csv)") if filename: lineEdit.setText(filename)
[docs] def getValues(self): """ Get dialog values. :return: Dictionary with COP filename :rtype: dict """ return { 'COP-filename': self.heatPumpDataFileInput.text() }