118 lines
3.9 KiB
Python
118 lines
3.9 KiB
Python
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()
|