試圖通過多灰塵的菲利普斯「在Kivy創建應用程序」一書的工作,但有一個部分,這是非常模糊的,並導致不正常運行的代碼。我相信我知道這個問題,但不知道如何解決它。的Python Kivy:on_press不使用根
這裏是我的.kv文件:
WeatherRoot:
<WeatherRoot>:
AddLocationForm:
orientation: 'vertical'
search_input: search_box
search_results: search_results_list
BoxLayout:
height: '48dp'
size_hint_y:None
TextInput:
multiline:False
write_tab:False
id: search_box
size_hint_x:50
on_text_validate: root.search_location()
Button:
text:'Search'
size_hint_x:25
on_press: root.search_location()
Button:
text:'Current Location'
size_hint_x:25
ListView:
id: search_results_list
adapter:
ListAdapter(data=[],cls=ListItemButton)
因爲on_press和on_text_validate去根,我的根(在這種情況下,WeatherRoot)不包含SEARCH_LOCATION()函數,這個崩潰時,我嘗試做一個搜索。
這裏是我的Python代碼:
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.properties import ObjectProperty from kivy.network.urlrequest import UrlRequest
owm_key = 'xxxxxxxxxxxxx'
class WeatherRoot(BoxLayout):
pass
class AddLocationForm(BoxLayout):
search_input = ObjectProperty()
def search_location(self):
search_template = 'http://api.openweathermap.org/data/2.5/find?q={}&type=like&APPID='+ owm_key
search_url = search_template.format(self.search_input.text)
request = UrlRequest(search_url,self.found_location)
def found_location(self,request,data):
data = json.loadS(data.decode()) if not isinstance(data,dict) else data
cities = ['{} ({})'.format(d['name'],d['sys']['country']) for d in data['list']]
self.search_results.item_strings = cities
self.search_results.adapter.data.clear()
self.search_results.adapter.data.extend(cities)
self.search_results.__trigger__reset_populate()
class WeatherApp(App):
pass
if __name__ == '__main__': WeatherApp().run()
因爲我WeatherRoot類是空的,使用
root.search_location()
什麼都不做。有沒有什麼辦法可以不引用根,而是「一個層次」?另一方面,有沒有其他人通過這本書的方式,你是如何處理這部分?
謝謝! 戴夫