我已经开始通过阅读Dusty Phillips的“在Kivy中创建应用程序”来学习Kivy框架。我完成了书中所说的一切,我以为我也理解我在做什么,但后来我遇到了“ParserException”。
这是我的代码:
WeatherRoot:
<WeatherRoot>:
AddLocationForm:
<AddLocationForm>:
orientation: "vertical"
# Set a value for the property that was created in the .py file.
search_input: search_box
search_results: search_results_list
BoxLayout:
height: "40dp"
size_hint_y: None
TextInput:
# Define an id for the widget so that it can be referenced
# from elsewhere in the KV file
id: search_box
size_hint_x: 50
multiline: False
# 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
on_press: root.search_location_by_coordinates()
ListView:
id: search_results_list
item_strings: []
添加WeatherRoot:
根小部件和<WeatherRoot>:
类规则后代码破了。在添加之前,代码工作正常。
这是我得到的错误:
kivy.lang.parser.ParserException: Parser: File "c:\Users\Utente-
006\Dropbox\Programming\rss-reader\weather.kv", line 8:
...
6: AddLocationForm:
7:
> 8: <AddLocationForm>:
9: orientation: "vertical"
10: # Set a value for the property that was created in the .py file.
...
Invalid class name
您不能在另一个类规则中包含类规则。解决方案是以下之一:
<AddLocationForm>:
<AddLocationForm>:
避免在kv文件中声明根规则,WeatherRoot:
和类规则<WeatherRoot>:
以避免混淆。
<WeatherRoot>:
AddLocationForm:
<AddLocationForm>:
orientation: "vertical"
...
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
class WeatherRoot(Screen):
pass
class AddLocationForm(BoxLayout):
pass
class Test(App):
def build(self):
return WeatherRoot()
if __name__ == "__main__":
Test().run()
#:kivy 1.11.0
<WeatherRoot>:
AddLocationForm:
<AddLocationForm>:
orientation: "vertical"
# Set a value for the property that was created in the .py file.
search_input: search_box
search_results: search_results_list
BoxLayout:
height: "40dp"
size_hint_y: None
TextInput:
# Define an id for the widget so that it can be referenced
# from elsewhere in the KV file
id: search_box
size_hint_x: 50
multiline: False
# 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
on_press: root.search_location_by_coordinates()
ListView:
id: search_results_list
item_strings: []