我是编程新手,并与 Kivy 一起学习。我遇到了一些奇怪的事情,所以创建了这个小例子来演示。
在我的 text.kv 文件中,我有这个:
#:kivy 2.0.0
<smallLabel@Label>:
font_size: 40
<bigLabel@Label>:
font_size: 60
BoxLayout:
orientation:'vertical'
padding: 20
spacing: 5
smallLabel:
text: 'Stays the same'
bigLabel:
id: changes
text: 'changes'
在我的python文件中:
from kivy.app import App
class TestApp(App):
pass
if __name__ == "__main__":
TestApp().run()
当我运行它时,我得到这个:
File "/home/marty/Python/datatut/test.kv", line 15
text: 'Stays the same'
^
SyntaxError: invalid syntax
现在,如果我改变我的小部件的大小写,那么第一个字母是大写的:
<SmallLabel@Label>:
font_size: 40
<bigLabel@Label>:
font_size: 60
BoxLayout:
orientation:'vertical'
padding: 20
spacing: 5
SmallLabel:
text: 'Stays the same'
bigLabel:
id: changes
text: 'changes'
请注意,我只更改了 SmallLabel。我将 bigLable 保留为小写。 如果我反过来这样做,那就是留下 smallLabel 但制作 BigLabel 它失败并出现相同的错误。 为什么我需要大写我的小部件的名称,为什么只有第一个? 我确实注意到在所有示例中,我已经看到自定义小部件名称的第一个字母总是大写,但没有看到这是一个要求,如果是,那么如果第一个小部件为什么第二个小部件可以工作大写?
答案 0 :(得分:0)
KV lang 加载器需要能够区分小部件和子小部件的属性,正如您所见,这两种类型都只是以 :
结尾的一行文本,但有一个技巧,假设您的类遵循 PEP8 大写类和蛇形属性的约定,则可以正确进行猜测。
这是(我有点同意)在https://kivy.org/doc/stable/guide/lang.html#instantiate-children中指出
<块引用>注意
小部件名称应以大写字母开头,而属性名称应以大写字母开头 应该以小写字母开头。遵循 PEP8 命名 鼓励约定俗成。
我假设第二个不需要这个猜测,因为它在第一个块之后没有缩进,所以它不能是父类的属性(属性必须在子类声明之前),所以它只能是一个子小部件,在这种情况下不需要此规则,但我无法从 quick glance at the code
中找到这是如何发生的