ich bin's mal wieder mit Kivy. Habe nun folgendes Problem: Laut Buch soll ich nun ein Customwidget unter dem Root Layout erstellen.
Erstmal hier der Code:
KV File:
Code: Alles auswählen
#: import ListItemButton kivy.uix.listview.ListItemButton
#: import ListAdapter kivy.adapters.listadapter.ListAdapter
WeatherRoot:
<WeatherRoot>:
AddLocationForm:
orientation: "vertical"
search_input: search_box
search_results: search_result_list
BoxLayout:
height: "40dp"
size_hint_y: None
TextInput:
id: search_box
size_hint_x: 50
Button:
text: "Search"
size_hint_x: 25
on_press: root.search_location()
Button:
text: "Current Location"
size_hint_x: 25
ListView:
id: search_result_list
adapter:
ListAdapter(data=[], cls=ListItemButton)
Code: Alles auswählen
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.network.urlrequest import UrlRequest
class WeatherRoot(BoxLayout):
pass
class AddLocationForm(BoxLayout):
search_input = ObjectProperty()
search_results = ObjectProperty()
def search_location(self):
search_template = "http://api.openweathermap.org/data/2.5/" + "find?q={}&type=like"
search_url = search_template.format(self.search_input.text)
request = UrlRequest(search_url, self.found_location)
def found_location(self, request, data):
cities = ["{}({})".format(d['name'], d['sys']['country'])
for d in data['list']]
if not cities:
self.search_results.item_strings = ["Nichts gefunden"]
else:
self.search_results.item_strings = cities
self.search_results.adapter.data.clear()
self.search_results.adapter.data.extened(cities)
self.search_results._trigger_reset_populate()
class WeatherApp(App):
pass
if __name__ == '__main__':
WeatherApp().run()