Advertisement
KCXO

Untitled

Nov 19th, 2023
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.97 KB | None | 0 0
  1. # Form implementation generated from reading ui file 'weatherUITesting.ui'
  2. #
  3. # Created by: PyQt6 UI code generator 6.4.2
  4. #
  5. # WARNING: Any manual changes made to this file will be lost when pyuic6 is
  6. # run again. Do not edit this file unless you know what you are doing.
  7.  
  8.  
  9. from PyQt6 import QtCore, QtGui, QtWidgets
  10. from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QMessageBox, QVBoxLayout
  11. from PyQt6.uic import loadUi
  12. import aiohttp
  13. import asyncio
  14. from asyncslot import asyncSlot, AsyncSlotRunner
  15. from datetime import datetime as dt
  16. import time
  17. import requests
  18.  
  19.  
  20.  
  21. class Ui_MainWindow(object):
  22. def setupUi(self, MainWindow):
  23. MainWindow.setObjectName("MainWindow")
  24. MainWindow.resize(1191, 1023)
  25. font = QtGui.QFont()
  26. font.setFamily(".AppleSystemUIFont")
  27. MainWindow.setFont(font)
  28. self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
  29. self.centralwidget.setObjectName("centralwidget")
  30. self.frame = QtWidgets.QFrame(parent=self.centralwidget)
  31. self.frame.setGeometry(QtCore.QRect(50, 40, 1031, 841))
  32. self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
  33. self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
  34. self.frame.setObjectName("frame")
  35. self.WeatherTabs = QtWidgets.QTabWidget(parent=self.frame)
  36. self.WeatherTabs.setGeometry(QtCore.QRect(100, 20, 1141, 941))
  37. self.WeatherTabs.setTabShape(QtWidgets.QTabWidget.TabShape.Triangular)
  38. self.WeatherTabs.setObjectName("WeatherTabs")
  39. self.LiveWeather = QtWidgets.QWidget()
  40. self.LiveWeather.setObjectName("LiveWeather")
  41. self.returnedResponse = QtWidgets.QLabel(parent=self.LiveWeather)
  42. self.returnedResponse.setGeometry(QtCore.QRect(50, 310, 731, 111))
  43. self.returnedResponse.setWordWrap(True)
  44. self.returnedResponse.setObjectName("returnedResponse")
  45. self.widget = QtWidgets.QWidget(parent=self.LiveWeather)
  46. self.widget.setGeometry(QtCore.QRect(60, 60, 311, 201))
  47. self.widget.setObjectName("widget")
  48. self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
  49. self.verticalLayout.setContentsMargins(0, 0, 0, 0)
  50. self.verticalLayout.setObjectName("verticalLayout")
  51. self.frame_2 = QtWidgets.QFrame(parent=self.widget)
  52. self.frame_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
  53. self.frame_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
  54. self.frame_2.setObjectName("frame_2")
  55. self.gridLayout = QtWidgets.QGridLayout(self.frame_2)
  56. self.gridLayout.setObjectName("gridLayout")
  57. self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
  58. self.horizontalLayout_2.setObjectName("horizontalLayout_2")
  59. self.statelabel = QtWidgets.QLabel(parent=self.frame_2)
  60. self.statelabel.setObjectName("statelabel")
  61. self.horizontalLayout_2.addWidget(self.statelabel)
  62. self.stateEnter = QtWidgets.QLineEdit(parent=self.frame_2)
  63. self.stateEnter.setStatusTip("")
  64. self.stateEnter.setObjectName("stateEnter")
  65. self.horizontalLayout_2.addWidget(self.stateEnter)
  66. self.gridLayout.addLayout(self.horizontalLayout_2, 1, 0, 1, 1)
  67. self.horizontalLayout = QtWidgets.QHBoxLayout()
  68. self.horizontalLayout.setObjectName("horizontalLayout")
  69. self.cityLabel = QtWidgets.QLabel(parent=self.frame_2)
  70. self.cityLabel.setObjectName("cityLabel")
  71. self.horizontalLayout.addWidget(self.cityLabel)
  72. self.cityEnter = QtWidgets.QLineEdit(parent=self.frame_2)
  73. self.cityEnter.setStatusTip("")
  74. self.cityEnter.setObjectName("cityEnter")
  75. self.horizontalLayout.addWidget(self.cityEnter)
  76. self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
  77. self.searchButton = QtWidgets.QPushButton(parent=self.frame_2)
  78. font = QtGui.QFont()
  79. font.setFamily(".AppleSystemUIFont")
  80. self.searchButton.setFont(font)
  81. self.searchButton.setObjectName("searchButton")
  82. self.gridLayout.addWidget(self.searchButton, 2, 0, 1, 1)
  83. self.verticalLayout.addWidget(self.frame_2)
  84. self.WeatherTabs.addTab(self.LiveWeather, "")
  85. self.Forecast = QtWidgets.QWidget()
  86. self.Forecast.setObjectName("Forecast")
  87. self.StartButton = QtWidgets.QPushButton(parent=self.Forecast)
  88. self.StartButton.setGeometry(QtCore.QRect(190, 670, 161, 61))
  89. self.StartButton.setObjectName("StartButton")
  90. self.gridLayoutWidget = QtWidgets.QWidget(parent=self.Forecast)
  91. self.gridLayoutWidget.setGeometry(QtCore.QRect(30, 100, 721, 391))
  92. self.gridLayoutWidget.setObjectName("gridLayoutWidget")
  93. self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget)
  94. self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
  95. self.gridLayout_2.setObjectName("gridLayout_2")
  96. self.forecastBox = QtWidgets.QLabel(parent=self.gridLayoutWidget)
  97. self.forecastBox.setObjectName("forecastBox")
  98. self.gridLayout_2.addWidget(self.forecastBox, 0, 0, 1, 1)
  99. self.WeatherTabs.addTab(self.Forecast, "")
  100. self.HistoricalWeather = QtWidgets.QWidget()
  101. self.HistoricalWeather.setObjectName("HistoricalWeather")
  102. self.WeatherTabs.addTab(self.HistoricalWeather, "")
  103. self.AQI = QtWidgets.QWidget()
  104. self.AQI.setObjectName("AQI")
  105. self.WeatherTabs.addTab(self.AQI, "")
  106. MainWindow.setCentralWidget(self.centralwidget)
  107. self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
  108. self.menubar.setGeometry(QtCore.QRect(0, 0, 1191, 21))
  109. self.menubar.setObjectName("menubar")
  110. self.LiveWeatherTab = QtWidgets.QMenu(parent=self.menubar)
  111. self.LiveWeatherTab.setObjectName("LiveWeatherTab")
  112. MainWindow.setMenuBar(self.menubar)
  113. self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
  114. self.statusbar.setObjectName("statusbar")
  115. MainWindow.setStatusBar(self.statusbar)
  116. self.actionHistroical_Weather_Forecast = QtGui.QAction(parent=MainWindow)
  117. self.actionHistroical_Weather_Forecast.setObjectName("actionHistroical_Weather_Forecast")
  118. self.menubar.addAction(self.LiveWeatherTab.menuAction())
  119.  
  120. self.retranslateUi(MainWindow)
  121. self.WeatherTabs.setCurrentIndex(1)
  122. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  123.  
  124. def retranslateUi(self, MainWindow):
  125. _translate = QtCore.QCoreApplication.translate
  126. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  127. self.returnedResponse.setText(_translate("MainWindow", "Information will be displayed here"))
  128. self.statelabel.setText(_translate("MainWindow", "Enter State"))
  129. self.stateEnter.setPlaceholderText(_translate("MainWindow", "EX: Connecticut, CT"))
  130. self.cityLabel.setText(_translate("MainWindow", "Enter City"))
  131.  
  132. self.cityEnter.setPlaceholderText(_translate("MainWindow", "EX: Hartford"))
  133. self.searchButton.setText(_translate("MainWindow", "Search"))
  134. self.searchButton.clicked.connect(asyncSlot(self.searchButtonClicked))
  135.  
  136. self.WeatherTabs.setTabText(self.WeatherTabs.indexOf(self.LiveWeather), _translate("MainWindow", "Live Weather"))
  137. self.StartButton.setText(_translate("MainWindow", "Retrieve Forecast"))
  138. self.StartButton.clicked.connect(asyncSlot(self.StartButtonClicked))
  139.  
  140. self.forecastBox.setText(_translate("MainWindow", "TextLabel"))
  141. self.WeatherTabs.setTabText(self.WeatherTabs.indexOf(self.Forecast), _translate("MainWindow", "Forecast"))
  142. self.WeatherTabs.setTabText(self.WeatherTabs.indexOf(self.HistoricalWeather), _translate("MainWindow", "Historical Weather"))
  143. self.WeatherTabs.setTabText(self.WeatherTabs.indexOf(self.AQI), _translate("MainWindow", "Air Quality"))
  144. self.LiveWeatherTab.setStatusTip(_translate("MainWindow", "Displays 3-Day Forecast"))
  145. self.LiveWeatherTab.setTitle(_translate("MainWindow", "Live Weather"))
  146. self.actionHistroical_Weather_Forecast.setText(_translate("MainWindow", "Histroical Weather Forecast"))
  147.  
  148.  
  149.  
  150.  
  151. async def searchButtonClicked(self):
  152. city = self.cityEnter.text()
  153. state = self.stateEnter.text()
  154.  
  155. async with aiohttp.ClientSession() as session:
  156. loop = asyncio.get_event_loop()
  157. await loop.create_task(self.search_async( session, city, state))
  158.  
  159.  
  160.  
  161. async def search_async(self, session, city, state):
  162. cityName, stateName, countryName = await self.get_location_info(session, city, state)
  163. liveTemp = await self.livetempDisplay(session, cityName, stateName)
  164.  
  165.  
  166. async def get_location_info(self, session, city, state):
  167. BASE_URL =
  168. API_KEY =
  169. url = BASE_URL + "/search.json?key=" + API_KEY + "&q=" + city + " " + state
  170. #response = requests.get(url)
  171.  
  172. async with session.get(url) as response:
  173. response_data = await response.json()
  174.  
  175. # Extracting relevant information
  176. api_data = response_data[0]
  177. cityName = api_data["name"]
  178. stateName = api_data["region"]
  179. countryName = api_data["country"]
  180.  
  181. return cityName, stateName, countryName
  182.  
  183.  
  184. async def livetempDisplay(self, session, cityName, stateName):
  185. BASE_URL =
  186. API_KEY =
  187. url = BASE_URL + "/current.json?key=" + API_KEY + "&q=" + cityName + " " +stateName + '&days'
  188.  
  189. async with session.get(url) as response:
  190. #response = requests.get(url)
  191. recd_data = await response.json()
  192. liveTemp = recd_data['current']['temp_f']
  193. feelsLike =recd_data['current']['feelslike_f']
  194. feelsLikeC =recd_data['current']['feelslike_c']
  195. humidity = recd_data['current']['humidity']
  196. windSpeed = recd_data['current']['wind_mph']
  197. windSpeedK = recd_data['current']['wind_kph']
  198. daTime = recd_data['current']['last_updated']
  199. conditions = recd_data['current']['condition']['text']
  200.  
  201. while(True):
  202. #print(liveTemp)
  203. #output = f"The current temperature for: {cityName}, {stateName} is {liveTemp} degrees Fahrenheit"
  204. 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}"
  205. self.returnedResponse.setText(output)
  206. await asyncio.sleep(300) #asyncio.sleep
  207.  
  208.  
  209. async def StartButtonClicked(self,cityName, stateName):
  210. async with aiohttp.ClientSession() as session:
  211. loop = asyncio.get_event_loop()
  212. await loop.create_task(self.forecast_async(session, cityName, stateName))
  213.  
  214.  
  215.  
  216. async def forecast_async(self, session, cityName, stateName):
  217. #cityName, stateName, countryName = await self.forecastDisplay(session, cityName, stateName)
  218. await self.forecastDisplay(session, cityName, stateName)
  219.  
  220.  
  221.  
  222.  
  223.  
  224. async def forecastDisplay(self, session, cityName, stateName):
  225. BASE_URL =
  226. API_KEY =
  227.  
  228. url = BASE_URL + "/forecast.json?key=" + API_KEY + "&q=" + cityName + " " + stateName + '&days=3'
  229. async with session.get(url) as response:
  230.  
  231. recd_data = await response.json()
  232.  
  233. day1 = recd_data['forecast']['forecastday'][0]['date_epoch']
  234. convertedDate1 = dt.fromtimestamp(day1)
  235. formattedDated1 = convertedDate1.strftime("%A, %B %d, %Y")
  236. #print(recd_data)
  237. #print(url)
  238.  
  239. maxTemp1 = recd_data['forecast']['forecastday'][0]['day']['maxtemp_f']
  240. maxTemp1C = recd_data['forecast']['forecastday'][0]['day']['maxtemp_c']
  241. avgTemp1 = recd_data['forecast']['forecastday'][0]['day']['avgtemp_f']
  242. avgTemp1C = recd_data['forecast']['forecastday'][0]['day']['avgtemp_c']
  243. minTemp1 = recd_data['forecast']['forecastday'][0]['day']['mintemp_f']
  244. minTemp1C = recd_data['forecast']['forecastday'][0]['day']['mintemp_c']
  245. uvIndex1 = recd_data['forecast']['forecastday'][0]['day']['uv']
  246. rainChance1 = recd_data['forecast']['forecastday'][0]['day']['daily_chance_of_rain']
  247. weathCond1 = recd_data['forecast']['forecastday'][0]['day']['condition']['text']
  248.  
  249. day2 = recd_data['forecast']['forecastday'][1]['date_epoch']
  250. convertedDate2 = dt.fromtimestamp(day2)
  251. formattedDated2 = convertedDate2.strftime("%A, %B %d, %Y")
  252.  
  253. maxTemp2 = recd_data['forecast']['forecastday'][1]['day']['maxtemp_f']
  254. maxTemp2C = recd_data['forecast']['forecastday'][1]['day']['maxtemp_c']
  255. avgTemp2 = recd_data['forecast']['forecastday'][1]['day']['avgtemp_f']
  256. avgTemp2C = recd_data['forecast']['forecastday'][1]['day']['avgtemp_c']
  257. minTemp2 = recd_data['forecast']['forecastday'][1]['day']['mintemp_f']
  258. minTemp2C = recd_data['forecast']['forecastday'][1]['day']['mintemp_c']
  259. uvIndex2 = recd_data['forecast']['forecastday'][1]['day']['uv']
  260. rainChance2 = recd_data['forecast']['forecastday'][1]['day']['daily_chance_of_rain']
  261. weathCond2 = recd_data['forecast']['forecastday'][1]['day']['condition']['text']
  262.  
  263. day3 = recd_data['forecast']['forecastday'][2]['date_epoch']
  264. convertedDate3 = dt.fromtimestamp(day3)
  265. formattedDated3 = convertedDate3.strftime("%A, %B %d, %Y")
  266.  
  267. maxTemp3 = recd_data['forecast']['forecastday'][2]['day']['maxtemp_f']
  268. maxTemp3C = recd_data['forecast']['forecastday'][2]['day']['maxtemp_c']
  269. avgTemp3 = recd_data['forecast']['forecastday'][2]['day']['avgtemp_f']
  270. avgTemp3C = recd_data['forecast']['forecastday'][2]['day']['avgtemp_c']
  271. minTemp3 = recd_data['forecast']['forecastday'][2]['day']['mintemp_f']
  272. minTemp3C = recd_data['forecast']['forecastday'][2]['day']['mintemp_c']
  273. uvIndex3 = recd_data['forecast']['forecastday'][2]['day']['uv']
  274. rainChance3 = recd_data['forecast']['forecastday'][2]['day']['daily_chance_of_rain']
  275. weathCond3 = recd_data['forecast']['forecastday'][2]['day']['condition']['text']
  276.  
  277.  
  278. outputF =( f"{formattedDated1}\n" +
  279. f"Weather for: {cityName}, {stateName}:\n" +
  280. f"High: {maxTemp1}°F\n" +
  281. f"Low: {minTemp1}°F\n" +
  282. f"Average Temperature: {avgTemp1}°F\n" +
  283. f"UV Index: {uvIndex1}\n" +
  284. f"Chance of rain: {rainChance1}\n" +
  285. f"Conditions: {weathCond1}\n")
  286.  
  287. print(f"{formattedDated2}\n" +
  288. f"Weather for: {cityName}, {stateName}:\n" +
  289. f"High: {maxTemp2}°F\n" +
  290. f"Low: {minTemp2}°F\n" +
  291. f"Average Temperature: {avgTemp2}°F\n" +
  292. f"UV Index: {uvIndex2}\n" +
  293. f"Chance of rain: {rainChance2}\n" +
  294. f"Conditions: {weathCond2}\n")
  295.  
  296.  
  297. print(f"{formattedDated3}\n" +
  298. f"Weather for: {cityName}, {stateName}:\n" +
  299. f"High: {maxTemp3}°F\n" +
  300. f"Low: {minTemp3}°F\n" +
  301. f"Average Temperature: {avgTemp3}°F\n" +
  302. f"UV Index: {uvIndex3}\n" +
  303. f"Chance of rain: {rainChance3}\n" +
  304. f"Conditions: {weathCond3}\n")
  305.  
  306. self.forecastBox.setText(outputF)
  307.  
  308.  
  309.  
  310.  
  311. if __name__ == "__main__":
  312. import sys
  313. app = QtWidgets.QApplication(sys.argv)
  314. MainWindow = QtWidgets.QMainWindow()
  315. ui = Ui_MainWindow()
  316. ui.setupUi(MainWindow)
  317. MainWindow.show()
  318. with AsyncSlotRunner():
  319. sys.exit(app.exec())
  320.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement