import ctypes from urllib.parse import quote from PyQt5 import QtCore, QtGui from PyQt5 import QtWidgets from .pomodules import poBaseURL from .pomodules.urlreader import UrlReader class PoGraphDisplay(QtWidgets.QWidget): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.setupUi(self) # Layer self.layer = None def setupUi(self, poGraphDisplay): """Definition der Benutzeroberflaeche des Wasserstanddiagramms mit den dazugehoerigen Funktionen.""" # uebergeordnetes Layout self.verticalLayout = QtWidgets.QVBoxLayout(poGraphDisplay) # Erste Zeile --- self.horizontalLayout = QtWidgets.QHBoxLayout() # Label Station self.lbStation = QtWidgets.QLabel() self.lbStation.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.horizontalLayout.addWidget(self.lbStation) self.lbStation.setText("Geben Sie hier eine Station ein:") # ComboBox Stations self.comboBox = QtWidgets.QComboBox() self.comboBox.setEditable(True) self.horizontalLayout.addWidget(self.comboBox) # Label Tage self.lbTage = QtWidgets.QLabel() self.lbTage.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.lbTage.setText("Tage") self.horizontalLayout.addWidget(self.lbTage) # SpinBox Tage self.sbTage = QtWidgets.QSpinBox() self.sbTage.setMinimum(5) self.sbTage.setMaximum(30) self.sbTage.setProperty("value", 14) self.horizontalLayout.addWidget(self.sbTage) # PushButton Laden self.pbLaden = QtWidgets.QPushButton() self.pbLaden.setObjectName("pbLaden") self.pbLaden.setText("Laden") self.horizontalLayout.addWidget(self.pbLaden) # Signal Slots self.pbLaden.clicked.connect(self.doPbLaden) self.verticalLayout.addLayout(self.horizontalLayout) # Zweite Zeile --- # Label fuer den Graphen self.lbGraph = QtWidgets.QLabel() self.lbGraph.setText("") self.lbGraph.setObjectName("lbGraph") self.verticalLayout.addWidget(self.lbGraph) # Quellenhinweis self.lbDatenquelle = QtWidgets.QLabel() self.lbDatenquelle.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignLeading | QtCore.Qt.AlignVCenter) self.lbDatenquelle.setText("Die Daten werden von 'pegelonline.wsv.de' zur Verfügung gestellt.") self.verticalLayout.addWidget(self.lbDatenquelle) # Dritte Zeile --- spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) def doLoadGraph(self): """Laedt die Stationsdaten anhand der vom Nutzer eingegebenen Daten.""" # Anzahl der Tage in der SpinBox days = self.getCurrentDays() # Stationsname aus der ComboBox station = quote(self.getCurrentStation()) url = poBaseURL + "/stations/%s/W/measurements.png?start=P%dD" % (station, days) ur = UrlReader(url) self.img_data = ur.getDataResponse() if ur.code > 299: AlertBox = ctypes.windll.user32.MessageBoxW AlertBox(None, "Beim Laden der Daten ist ein Fehler aufgetreten.", "Fehler", 0) else: # Grafik einsetzen pixmap = QtGui.QPixmap() pixmap.loadFromData(self.img_data) self.lbGraph.clear() self.lbGraph.setPixmap(pixmap) self.lbGraph.resize(pixmap.width(), pixmap.height()) def doPbLaden(self): """Laedt den Graphen der ausgewaehlten Station.""" if self.layer is None: self.doLoadGraph() def getCurrentDays(self): return self.sbTage.value() def getCurrentStation(self): return self.comboBox.currentText()