我正在学习如何使用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的解决方案。
以大写字母开头的动态类名称允许代码正常工作,即使我不确定为什么。我想它只是那些面向对象的东西之一,而不是代码工作的机制和欣赏它的结果。感谢您的帮助,我希望这有助于其他人