Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Form implementation generated from reading ui file 'weatherUITesting.ui'
- #
- # Created by: PyQt6 UI code generator 6.4.2
- #
- # WARNING: Any manual changes made to this file will be lost when pyuic6 is
- # run again. Do not edit this file unless you know what you are doing.
- from PyQt6 import QtCore, QtGui, QtWidgets
- from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QMessageBox, QVBoxLayout
- from PyQt6.uic import loadUi
- import aiohttp
- import asyncio
- from asyncslot import asyncSlot, AsyncSlotRunner
- from datetime import datetime as dt
- import time
- import requests
- class Ui_MainWindow(object):
- def setupUi(self, MainWindow):
- MainWindow.setObjectName("MainWindow")
- MainWindow.resize(1191, 1023)
- font = QtGui.QFont()
- font.setFamily(".AppleSystemUIFont")
- MainWindow.setFont(font)
- self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.frame = QtWidgets.QFrame(parent=self.centralwidget)
- self.frame.setGeometry(QtCore.QRect(50, 40, 1031, 841))
- self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
- self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
- self.frame.setObjectName("frame")
- self.WeatherTabs = QtWidgets.QTabWidget(parent=self.frame)
- self.WeatherTabs.setGeometry(QtCore.QRect(100, 20, 1141, 941))
- self.WeatherTabs.setTabShape(QtWidgets.QTabWidget.TabShape.Triangular)
- self.WeatherTabs.setObjectName("WeatherTabs")
- self.LiveWeather = QtWidgets.QWidget()
- self.LiveWeather.setObjectName("LiveWeather")
- self.returnedResponse = QtWidgets.QLabel(parent=self.LiveWeather)
- self.returnedResponse.setGeometry(QtCore.QRect(50, 310, 731, 111))
- self.returnedResponse.setWordWrap(True)
- self.returnedResponse.setObjectName("returnedResponse")
- self.widget = QtWidgets.QWidget(parent=self.LiveWeather)
- self.widget.setGeometry(QtCore.QRect(60, 60, 311, 201))
- self.widget.setObjectName("widget")
- self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
- self.verticalLayout.setContentsMargins(0, 0, 0, 0)
- self.verticalLayout.setObjectName("verticalLayout")
- self.frame_2 = QtWidgets.QFrame(parent=self.widget)
- self.frame_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
- self.frame_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
- self.frame_2.setObjectName("frame_2")
- self.gridLayout = QtWidgets.QGridLayout(self.frame_2)
- self.gridLayout.setObjectName("gridLayout")
- self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- self.statelabel = QtWidgets.QLabel(parent=self.frame_2)
- self.statelabel.setObjectName("statelabel")
- self.horizontalLayout_2.addWidget(self.statelabel)
- self.stateEnter = QtWidgets.QLineEdit(parent=self.frame_2)
- self.stateEnter.setStatusTip("")
- self.stateEnter.setObjectName("stateEnter")
- self.horizontalLayout_2.addWidget(self.stateEnter)
- self.gridLayout.addLayout(self.horizontalLayout_2, 1, 0, 1, 1)
- self.horizontalLayout = QtWidgets.QHBoxLayout()
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.cityLabel = QtWidgets.QLabel(parent=self.frame_2)
- self.cityLabel.setObjectName("cityLabel")
- self.horizontalLayout.addWidget(self.cityLabel)
- self.cityEnter = QtWidgets.QLineEdit(parent=self.frame_2)
- self.cityEnter.setStatusTip("")
- self.cityEnter.setObjectName("cityEnter")
- self.horizontalLayout.addWidget(self.cityEnter)
- self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
- self.searchButton = QtWidgets.QPushButton(parent=self.frame_2)
- font = QtGui.QFont()
- font.setFamily(".AppleSystemUIFont")
- self.searchButton.setFont(font)
- self.searchButton.setObjectName("searchButton")
- self.gridLayout.addWidget(self.searchButton, 2, 0, 1, 1)
- self.verticalLayout.addWidget(self.frame_2)
- self.WeatherTabs.addTab(self.LiveWeather, "")
- self.Forecast = QtWidgets.QWidget()
- self.Forecast.setObjectName("Forecast")
- self.StartButton = QtWidgets.QPushButton(parent=self.Forecast)
- self.StartButton.setGeometry(QtCore.QRect(190, 670, 161, 61))
- self.StartButton.setObjectName("StartButton")
- self.gridLayoutWidget = QtWidgets.QWidget(parent=self.Forecast)
- self.gridLayoutWidget.setGeometry(QtCore.QRect(30, 100, 721, 391))
- self.gridLayoutWidget.setObjectName("gridLayoutWidget")
- self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget)
- self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
- self.gridLayout_2.setObjectName("gridLayout_2")
- self.forecastBox = QtWidgets.QLabel(parent=self.gridLayoutWidget)
- self.forecastBox.setObjectName("forecastBox")
- self.gridLayout_2.addWidget(self.forecastBox, 0, 0, 1, 1)
- self.WeatherTabs.addTab(self.Forecast, "")
- self.HistoricalWeather = QtWidgets.QWidget()
- self.HistoricalWeather.setObjectName("HistoricalWeather")
- self.WeatherTabs.addTab(self.HistoricalWeather, "")
- self.AQI = QtWidgets.QWidget()
- self.AQI.setObjectName("AQI")
- self.WeatherTabs.addTab(self.AQI, "")
- MainWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1191, 21))
- self.menubar.setObjectName("menubar")
- self.LiveWeatherTab = QtWidgets.QMenu(parent=self.menubar)
- self.LiveWeatherTab.setObjectName("LiveWeatherTab")
- MainWindow.setMenuBar(self.menubar)
- self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
- self.statusbar.setObjectName("statusbar")
- MainWindow.setStatusBar(self.statusbar)
- self.actionHistroical_Weather_Forecast = QtGui.QAction(parent=MainWindow)
- self.actionHistroical_Weather_Forecast.setObjectName("actionHistroical_Weather_Forecast")
- self.menubar.addAction(self.LiveWeatherTab.menuAction())
- self.retranslateUi(MainWindow)
- self.WeatherTabs.setCurrentIndex(1)
- QtCore.QMetaObject.connectSlotsByName(MainWindow)
- def retranslateUi(self, MainWindow):
- _translate = QtCore.QCoreApplication.translate
- MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
- self.returnedResponse.setText(_translate("MainWindow", "Information will be displayed here"))
- self.statelabel.setText(_translate("MainWindow", "Enter State"))
- self.stateEnter.setPlaceholderText(_translate("MainWindow", "EX: Connecticut, CT"))
- self.cityLabel.setText(_translate("MainWindow", "Enter City"))
- self.cityEnter.setPlaceholderText(_translate("MainWindow", "EX: Hartford"))
- self.searchButton.setText(_translate("MainWindow", "Search"))
- self.searchButton.clicked.connect(asyncSlot(self.searchButtonClicked))
- self.WeatherTabs.setTabText(self.WeatherTabs.indexOf(self.LiveWeather), _translate("MainWindow", "Live Weather"))
- self.StartButton.setText(_translate("MainWindow", "Retrieve Forecast"))
- self.StartButton.clicked.connect(asyncSlot(self.StartButtonClicked))
- self.forecastBox.setText(_translate("MainWindow", "TextLabel"))
- self.WeatherTabs.setTabText(self.WeatherTabs.indexOf(self.Forecast), _translate("MainWindow", "Forecast"))
- self.WeatherTabs.setTabText(self.WeatherTabs.indexOf(self.HistoricalWeather), _translate("MainWindow", "Historical Weather"))
- self.WeatherTabs.setTabText(self.WeatherTabs.indexOf(self.AQI), _translate("MainWindow", "Air Quality"))
- self.LiveWeatherTab.setStatusTip(_translate("MainWindow", "Displays 3-Day Forecast"))
- self.LiveWeatherTab.setTitle(_translate("MainWindow", "Live Weather"))
- self.actionHistroical_Weather_Forecast.setText(_translate("MainWindow", "Histroical Weather Forecast"))
- async def searchButtonClicked(self):
- city = self.cityEnter.text()
- state = self.stateEnter.text()
- async with aiohttp.ClientSession() as session:
- loop = asyncio.get_event_loop()
- await loop.create_task(self.search_async( session, city, state))
- async def search_async(self, session, city, state):
- cityName, stateName, countryName = await self.get_location_info(session, city, state)
- liveTemp = await self.livetempDisplay(session, cityName, stateName)
- async def get_location_info(self, session, city, state):
- BASE_URL =
- API_KEY =
- url = BASE_URL + "/search.json?key=" + API_KEY + "&q=" + city + " " + state
- #response = requests.get(url)
- async with session.get(url) as response:
- response_data = await response.json()
- # Extracting relevant information
- api_data = response_data[0]
- cityName = api_data["name"]
- stateName = api_data["region"]
- countryName = api_data["country"]
- return cityName, stateName, countryName
- async def livetempDisplay(self, session, cityName, stateName):
- BASE_URL =
- API_KEY =
- url = BASE_URL + "/current.json?key=" + API_KEY + "&q=" + cityName + " " +stateName + '&days'
- async with session.get(url) as response:
- #response = requests.get(url)
- recd_data = await response.json()
- liveTemp = recd_data['current']['temp_f']
- feelsLike =recd_data['current']['feelslike_f']
- feelsLikeC =recd_data['current']['feelslike_c']
- humidity = recd_data['current']['humidity']
- windSpeed = recd_data['current']['wind_mph']
- windSpeedK = recd_data['current']['wind_kph']
- daTime = recd_data['current']['last_updated']
- conditions = recd_data['current']['condition']['text']
- while(True):
- #print(liveTemp)
- #output = f"The current temperature for: {cityName}, {stateName} is {liveTemp} degrees Fahrenheit"
- output = f"The weather for {cityName}, {stateName}:\nCurrent temp: {liveTemp}°f \nFeels like: {feelsLike}°f \nHumidty: {humidity}% \nWindspeed: {windSpeed}mph \nLocal time {daTime} \nCurrent Conditions: {conditions}"
- self.returnedResponse.setText(output)
- await asyncio.sleep(300) #asyncio.sleep
- async def StartButtonClicked(self,cityName, stateName):
- async with aiohttp.ClientSession() as session:
- loop = asyncio.get_event_loop()
- await loop.create_task(self.forecast_async(session, cityName, stateName))
- async def forecast_async(self, session, cityName, stateName):
- #cityName, stateName, countryName = await self.forecastDisplay(session, cityName, stateName)
- await self.forecastDisplay(session, cityName, stateName)
- async def forecastDisplay(self, session, cityName, stateName):
- BASE_URL =
- API_KEY =
- url = BASE_URL + "/forecast.json?key=" + API_KEY + "&q=" + cityName + " " + stateName + '&days=3'
- async with session.get(url) as response:
- recd_data = await response.json()
- day1 = recd_data['forecast']['forecastday'][0]['date_epoch']
- convertedDate1 = dt.fromtimestamp(day1)
- formattedDated1 = convertedDate1.strftime("%A, %B %d, %Y")
- #print(recd_data)
- #print(url)
- maxTemp1 = recd_data['forecast']['forecastday'][0]['day']['maxtemp_f']
- maxTemp1C = recd_data['forecast']['forecastday'][0]['day']['maxtemp_c']
- avgTemp1 = recd_data['forecast']['forecastday'][0]['day']['avgtemp_f']
- avgTemp1C = recd_data['forecast']['forecastday'][0]['day']['avgtemp_c']
- minTemp1 = recd_data['forecast']['forecastday'][0]['day']['mintemp_f']
- minTemp1C = recd_data['forecast']['forecastday'][0]['day']['mintemp_c']
- uvIndex1 = recd_data['forecast']['forecastday'][0]['day']['uv']
- rainChance1 = recd_data['forecast']['forecastday'][0]['day']['daily_chance_of_rain']
- weathCond1 = recd_data['forecast']['forecastday'][0]['day']['condition']['text']
- day2 = recd_data['forecast']['forecastday'][1]['date_epoch']
- convertedDate2 = dt.fromtimestamp(day2)
- formattedDated2 = convertedDate2.strftime("%A, %B %d, %Y")
- maxTemp2 = recd_data['forecast']['forecastday'][1]['day']['maxtemp_f']
- maxTemp2C = recd_data['forecast']['forecastday'][1]['day']['maxtemp_c']
- avgTemp2 = recd_data['forecast']['forecastday'][1]['day']['avgtemp_f']
- avgTemp2C = recd_data['forecast']['forecastday'][1]['day']['avgtemp_c']
- minTemp2 = recd_data['forecast']['forecastday'][1]['day']['mintemp_f']
- minTemp2C = recd_data['forecast']['forecastday'][1]['day']['mintemp_c']
- uvIndex2 = recd_data['forecast']['forecastday'][1]['day']['uv']
- rainChance2 = recd_data['forecast']['forecastday'][1]['day']['daily_chance_of_rain']
- weathCond2 = recd_data['forecast']['forecastday'][1]['day']['condition']['text']
- day3 = recd_data['forecast']['forecastday'][2]['date_epoch']
- convertedDate3 = dt.fromtimestamp(day3)
- formattedDated3 = convertedDate3.strftime("%A, %B %d, %Y")
- maxTemp3 = recd_data['forecast']['forecastday'][2]['day']['maxtemp_f']
- maxTemp3C = recd_data['forecast']['forecastday'][2]['day']['maxtemp_c']
- avgTemp3 = recd_data['forecast']['forecastday'][2]['day']['avgtemp_f']
- avgTemp3C = recd_data['forecast']['forecastday'][2]['day']['avgtemp_c']
- minTemp3 = recd_data['forecast']['forecastday'][2]['day']['mintemp_f']
- minTemp3C = recd_data['forecast']['forecastday'][2]['day']['mintemp_c']
- uvIndex3 = recd_data['forecast']['forecastday'][2]['day']['uv']
- rainChance3 = recd_data['forecast']['forecastday'][2]['day']['daily_chance_of_rain']
- weathCond3 = recd_data['forecast']['forecastday'][2]['day']['condition']['text']
- outputF =( f"{formattedDated1}\n" +
- f"Weather for: {cityName}, {stateName}:\n" +
- f"High: {maxTemp1}°F\n" +
- f"Low: {minTemp1}°F\n" +
- f"Average Temperature: {avgTemp1}°F\n" +
- f"UV Index: {uvIndex1}\n" +
- f"Chance of rain: {rainChance1}\n" +
- f"Conditions: {weathCond1}\n")
- print(f"{formattedDated2}\n" +
- f"Weather for: {cityName}, {stateName}:\n" +
- f"High: {maxTemp2}°F\n" +
- f"Low: {minTemp2}°F\n" +
- f"Average Temperature: {avgTemp2}°F\n" +
- f"UV Index: {uvIndex2}\n" +
- f"Chance of rain: {rainChance2}\n" +
- f"Conditions: {weathCond2}\n")
- print(f"{formattedDated3}\n" +
- f"Weather for: {cityName}, {stateName}:\n" +
- f"High: {maxTemp3}°F\n" +
- f"Low: {minTemp3}°F\n" +
- f"Average Temperature: {avgTemp3}°F\n" +
- f"UV Index: {uvIndex3}\n" +
- f"Chance of rain: {rainChance3}\n" +
- f"Conditions: {weathCond3}\n")
- self.forecastBox.setText(outputF)
- if __name__ == "__main__":
- import sys
- app = QtWidgets.QApplication(sys.argv)
- MainWindow = QtWidgets.QMainWindow()
- ui = Ui_MainWindow()
- ui.setupUi(MainWindow)
- MainWindow.show()
- with AsyncSlotRunner():
- sys.exit(app.exec())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement