# -*- coding: utf-8 -*- """ Project: Analyse worldwide COVID-19 Data and provide graphs etc. @author Patrick Müller """ import sys from datetime import datetime from PyQt5.QtWidgets import * from PyQt5.QtGui import * import Analyser as ana class UserInterface(QWidget): def __init__(self, app): super().__init__() # Get Analyser instance and required stuff from it self.analyser = ana.Analyser() countries = self.analyser.getAvailableCountries() dates = self.analyser.getAvailableDates() # PyQT Setup self.setWindowTitle('COVID-19 Analytics') screen_width, screen_height = app.desktop().screenGeometry().width(), app.desktop().screenGeometry().height() # screen_width, screen_height = 3840, 2160 self.setGeometry(((screen_width / 2) - 750), ((screen_height / 2) - 375), 1500, 750) self.setMinimumWidth(1300) # Layout boxes self.header_box = QHBoxLayout() h2box1 = QHBoxLayout() labelBox = QHBoxLayout() picklistBox = QHBoxLayout() buttonBox = QHBoxLayout() caseNumberBox = QHBoxLayout() self.graphBox = QHBoxLayout() # Heading heading = QLabel('

COVID-19 Analytics

') self.header_box.addWidget(heading) # Sub-Header subheader1 = QLabel('

Statistics about one country

') h2box1.addWidget(subheader1) # Country Picker countryPickerLabel = QLabel('

Pick a country:

') labelBox.addWidget(countryPickerLabel) self.countryPicker = QComboBox(parent=self) self.countryPicker.addItems(countries) self.countryPicker.setCurrentText('Germany') picklistBox.addWidget(self.countryPicker, 1) # Start Date Picker startDatePickerLabel = QLabel('

Pick a start date:

') labelBox.addWidget(startDatePickerLabel) self.startDatePicker = QComboBox(parent=self) self.startDatePicker.addItems(dates) self.startDatePicker.setCurrentText('2019-12-31') picklistBox.addWidget(self.startDatePicker, 1) # End Date Picker endDatePickerLabel = QLabel('

Pick an end date:

') labelBox.addWidget(endDatePickerLabel) self.endDatePicker = QComboBox(parent=self) self.endDatePicker.addItems(dates) self.endDatePicker.setCurrentText(datetime.now().strftime('%Y-%m-%d')) picklistBox.addWidget(self.endDatePicker, 1) # Calculate Button self.calculateSingleCountryStats = QPushButton('Calculate') buttonBox.addWidget(self.calculateSingleCountryStats) self.calculateSingleCountryStats.setCheckable(True) self.calculateSingleCountryStats.clicked.connect(self.btnstate) # Total cases number self.casesNumber = QLabel('

Total Case Number: NaN

') caseNumberBox.addWidget(self.casesNumber) # Generate Layout layout = QVBoxLayout() layout.addLayout(self.header_box) layout.addSpacing(50) layout.addLayout(h2box1) layout.addSpacing(10) layout.addLayout(labelBox) layout.addLayout(picklistBox) layout.addSpacing(10) layout.addLayout(buttonBox) layout.addSpacing(10) layout.addLayout(caseNumberBox) layout.addSpacing(10) layout.addLayout(self.graphBox) layout.addStretch(1) self.setLayout(layout) self.show() def btnstate(self): if self.calculateSingleCountryStats.isChecked(): # To reset the button print('pressed') self.calculateSingleCountryStats.toggle() country = self.countryPicker.currentText() startDate = self.startDatePicker.currentText() endDate = self.endDatePicker.currentText() casesGraphPath = self.analyser.getCasesGraph(country, startDate, endDate) caseIncreaseGraphPath = self.analyser.getCaseIncreaseGraph(country, startDate, endDate) self.casesNumber.setText( ('

Total case number in ' + country + ' as of ' + endDate + ': ' + str(self.analyser.getTotalCases(country, endDate))+'

')) self.casesGraphPlaceHolder = QLabel(self) self.casesIncreasePlaceHolder = QLabel(self) self.clearLayout(self.graphBox) self.graphBox.addWidget(self.casesGraphPlaceHolder) self.graphBox.addWidget(self.casesIncreasePlaceHolder) self.casesGraphPlaceHolder.setPixmap(QPixmap(casesGraphPath)) self.casesIncreasePlaceHolder.setPixmap(QPixmap(caseIncreaseGraphPath)) def clearLayout(self, layout): for i in reversed(range(layout.count())): widgetToRemove = layout.itemAt(i).widget() # remove it from the layout list layout.removeWidget(widgetToRemove) # remove it from the gui widgetToRemove.setParent(None) def main(): app = QApplication(sys.argv) ex = UserInterface(app) sys.exit(app.exec_())