Kivy 自定义小部件行为

时间:2021-07-27 04:33:21

标签: python python-3.x kivy kivy-language

我是编程新手,并与 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 它失败并出现相同的错误。 为什么我需要大写我的小部件的名称,为什么只有第一个? 我确实注意到在所有示例中,我已经看到自定义小部件名称的第一个字母总是大写,但没有看到这是一个要求,如果是,那么如果第一个小部件为什么第二个小部件可以工作大写?

1 个答案:

答案 0 :(得分:0)

KV lang 加载器需要能够区分小部件和子小部件的属性,正如您所见,这两种类型都只是以 : 结尾的一行文本,但有一个技巧,假设您的类遵循 PEP8 大写类和蛇形属性的约定,则可以正确进行猜测。

这是(我有点同意)在https://kivy.org/doc/stable/guide/lang.html#instantiate-children中指出

<块引用>

注意

小部件名称应以大写字母开头,而属性名称应以大写字母开头 应该以小写字母开头。遵循 PEP8 命名 鼓励约定俗成。

我假设第二个不需要这个猜测,因为它在第一个块之后没有缩进,所以它不能是父类的属性(属性必须在子类声明之前),所以它只能是一个子小部件,在这种情况下不需要此规则,但我无法从 quick glance at the code

中找到这是如何发生的