简单示例中的属性名称无效

时间:2014-04-26 20:54:48

标签: python kivy kivy-language

我已经从一本关于Kivy和python的书中复制了这段代码

main.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.network.urlrequest import UrlRequest

import json

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) :
        data = json.loads(data.decode())
        cities = [ "{} ({})".format(d['name'], d['sys']['country']) for d in data['list'] ]
        self.search_results.item_strings = cities

class WeatherApp(App):
    pass


if __name__ == "__main__" :
    WeatherApp().run()

weather.kv

AddLocationForm:

<AddLocationForm>:
    orientation: "vertical"
    search_input: search_box
    search_results: search_results_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_results_list
        item_strings: []

为什么会出现以下错误?

Traceback (most recent call last):
 File "main.py", line 27, in <module>
   WeatherApp().run()
 File "C:\Kivy\kivy\kivy\app.py", line 765, in run
   self.load_kv(filename=self.kv_file)
 File "C:\Kivy\kivy\kivy\app.py", line 585, in load_kv
   root = Builder.load_file(rfilename)
 File "C:\Kivy\kivy\kivy\lang.py", line 1444, in load_file
   return self.load_string(data, **kwargs)
 File "C:\Kivy\kivy\kivy\lang.py", line 1491, in load_string
   parser = Parser(content=string, filename=fn)
 File "C:\Kivy\kivy\kivy\lang.py", line 1049, in __init__
   self.parse(content)
 File "C:\Kivy\kivy\kivy\lang.py", line 1122, in parse
   objects, remaining_lines = self.parse_level(0, lines)
 File "C:\Kivy\kivy\kivy\lang.py", line 1218, in parse_level
   level + 1, lines[i:], spaces)
 File "C:\Kivy\kivy\kivy\lang.py", line 1228, in parse_level
   'Invalid property name')
kivy.lang.ParserException: Parser: File ".\weather.kv", line 21:
...
    19:                       size_hint_x: 25
    20:       ListView:
>>   21:               id : search_results_list
    22:               item_strings: []
...
Invalid property name

1 个答案:

答案 0 :(得分:7)

id : search_results_list

这是因为你在id之后有一个空格,它应该是

id: search_results_list

如果在书中,我猜这是一个错字。