Kivy中weather.kv文件行3出现ParserException解析异常的原因咨询
Kivy kv文件解析异常原因分析
先看你提供的weather.kv代码和错误提示,这个解析异常主要有两个关键原因:
你的
weather.kv原代码:AddLocationForm: <AddLocationForm@BoxLayout>: orientation:"vertical" BoxLayout: TextInput: Button: text: "Search" Button: text: "Current Location"报错信息:
kivy.lang.parser.ParserException: Parser: File "C:\programming\projects\scripts\kivy\FirstApp\weather.kv", line 3:
1. 核心原因:自定义控件实例化顺序错误
你在kv文件第一行就写了AddLocationForm:,这是要直接把这个自定义布局作为根控件实例化,但这个控件的定义(<AddLocationForm@BoxLayout>:)是在第二行才开始的。Kivy的kv解析器是从上到下逐行处理的,当它读到第一行时,根本不知道AddLocationForm是什么,自然会触发解析异常。
2. 次要原因:控件定义的完整性问题
你的TextInput控件后面没有任何属性或子元素,虽然Kivy理论上允许空控件定义,但在前面已经有顺序错误的情况下,这种写法会加剧解析混乱,导致错误行号指向第三行。
修复后的正确代码
把实例化代码移到自定义控件定义的后面,同时给TextInput添加简单属性让代码更规范:
<AddLocationForm@BoxLayout>: orientation:"vertical" BoxLayout: TextInput: hint_text: "输入城市名称" Button: text: "Search" Button: text: "Current Location" AddLocationForm:
调整后,解析器会先注册AddLocationForm这个自定义布局,再实例化它作为根控件,就能正常解析了。
内容的提问来源于stack exchange,提问作者Ganesh Tiwari
相关产品推荐
相关产品推荐

