Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from kivy.app import App
- from kivy.uix.boxlayout import BoxLayout
- from kivy.clock import mainthread
- from plyer import gps, notification
- import requests
- import json
- class WeatherApp(App):
- def build(self):
- self.layout = BoxLayout(orientation='vertical')
- self.location_label = Label(text="Getting location...", font_size=24)
- self.temp_label = Label(text="", font_size=24)
- self.desc_label = Label(text="", font_size=24)
- self.refresh_btn = Button(text="Refresh", on_press=self.refresh_weather)
- self.layout.add_widget(self.location_label)
- self.layout.add_widget(self.temp_label)
- self.layout.add_widget(self.desc_label)
- self.layout.add_widget(self.refresh_btn)
- self.api_key = "YOUR_API_KEY" # Get from openweathermap.org
- self.start_gps()
- return self.layout
- def start_gps(self):
- try:
- gps.configure(on_location=self.on_location)
- gps.start()
- except NotImplementedError:
- notification.notify(title="GPS Error", message="GPS not supported")
- def on_location(self, **kwargs):
- lat = kwargs.get('lat')
- lon = kwargs.get('lon')
- if lat and lon:
- self.get_weather(lat, lon)
- def refresh_weather(self, instance):
- self.start_gps()
- def get_weather(self, lat, lon):
- url = f"http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={self.api_key}&units=metric"
- try:
- response = requests.get(url)
- data = json.loads(response.text)
- self.update_ui(data)
- except Exception as e:
- notification.notify(title="Weather Error", message=str(e))
- @mainthread
- def update_ui(self, data):
- self.location_label.text = f"{data['name']}, {data['sys']['country']}"
- self.temp_label.text = f"Temperature: {data['main']['temp']}°C"
- self.desc_label.text = f"Weather: {data['weather'][0]['description']}"
- if __name__ == '__main__':
- WeatherApp().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement