在kivy

时间:2017-12-08 20:06:28

标签: python kivy kivy-language

我正在学习如何使用kivy,而且我对了解kivy语言的工作方式非常感兴趣。

好吧,我试图使用FloatLayout在特定位置显示几个标签。由于标签具有相似的属性,因此我创建了一个动态类以避免冗余。但由于某些原因,当我使用动态类时,我在pos_hint上得到语法错误,因为我认为它是有效的语法。但奇怪的是,当我使用常规Label作为第一个并填写属性,然后是动态类,它就像我想要的那样工作

这是我的测试python文件:

import kivy

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.button import Button

class floatgameApp(App):
    pass

class PlayGame(FloatLayout):
    pass

if __name__ == '__main__':
    floatgameApp().run()

以下是产生语法错误的kv文件:

<mylabel@Label>:
    size_hint_x: None
    size_hint_y: None
    height: "40dp"
    width: "200dp"

PlayGame:

<PlayGame>:
    top_y_pos: 0.98
    FloatLayout:
        mylabel:
            pos_hint :{'center_x': 0.09, 'center_y': root.top_y_pos}
            text: "Score: 0"
        mylabel:
            pos_hint: {'center_x': 0.5, 'center_y': root.top_y_pos}
            text: "Time: 0"
        mylabel:
            pos_hint: {'center_x': 0.9, 'center_y': root.top_y_pos}
            text: "Power-Ups"

这是上面代码产生的错误:

    pos_hint: {'center_x': 0.9, 'center_y': root.top_y_pos}
    ^
SyntaxError: invalid syntax

这是一个正常工作,但看起来有点凌乱:

<mylabel@Label>:
    size_hint_x: None
    size_hint_y: None
    height: "40dp"
    width: "200dp"

PlayGame:

<PlayGame>:
    top_y_pos: 0.98
    FloatLayout:
        Label:
            size_hint_x: None
            size_hint_y: None
            height: "40dp"
            width: "200dp"            
            pos_hint :{'center_x': 0.09, 'center_y': root.top_y_pos}
            text: "Score: 0"
        mylabel:
            pos_hint: {'center_x': 0.5, 'center_y': root.top_y_pos}
            text: "Time: 0"
        mylabel:
            pos_hint: {'center_x': 0.9, 'center_y': root.top_y_pos}
            text: "Power-Ups"

在我的问题的这个编辑版本中,我想要感谢@ SP-SP的解决方案。

以大写字母开头的动态类名称允许代码正常工作,即使我不确定为什么。我想它只是那些面向对象的东西之一,而不是代码工作的机制和欣赏它的结果。感谢您的帮助,我希望这有助于其他人

0 个答案:

没有答案