如何在.kv文件中实现for循环

时间:2019-10-29 09:54:24

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

我已经在python文件(main.py)中编写了python代码,以创建一个kivy应用,该应用包含动态创建的标签,效果很好。 这是main.py文件

main.py

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout

class createLabels(GridLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)        
        self.cols=1
        labels=[Label(text='Label '+str(i)) for i in range(5)]
        [self.add_widget(label) for label in labels]       

class DocApp(App):        
    def build(self):
        return createLabels()

if __name__=="__main__":
    DocApp().run()

但是,我想使用kivy语言文件(.kv)动态创建与上述标签类似的标签。我不确定是否可以在.kv文件中使用列表和for语句。我尝试了类似类型问题之一中提到的解决方案,但是没有用。

1 个答案:

答案 0 :(得分:0)

您可以使用on_kv_post,它在您使用on_kv_post的kv类准备就绪时运行。并且动态地(如按按钮一样)与下面的示例基本相同。

from kivy.app import App
from kivy.lang import Builder

KV = '''
#: import Label kivy.uix.label.Label

GridLayout:
    cols: 1
    on_kv_post:
        [self.add_widget(Label(text="Label " + str(i))) for i in range(9)]

'''

class TestApp(App):
    def build(self):
        return Builder.load_string(KV)

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