如何在 .kv 文件中添加多个标签

How to add multiple labels in .kv file

我的问题是我想添加多个标签而不必重复那么多行代码。我已经搜索了很长时间的解决方案,但我所看到的只是在 python 文件中编写一个 for 循环,而不是处理 .kv 文件。但是,我要添加的标签的位置在 GridLayout 内,在 scrollLayout 内,在 BoxLayout 内,在另一个 BoxLayout 内。在我的 python 文件中编写所有这些代码真的是唯一的解决方案吗?这个解决方案有更好的方法吗?

这是我第一次在 Whosebug 上提问,我对这一切都很陌生,如果我没有以常规或清晰的格式提问,请纠正我。非常感谢。

python代码

from kivy.uix.widget import Widget
from kivy.app import App
from kivy.lang import Builder
Builder.load_file('widgetq.kv')



class Win(Widget):
    pass



class WidgetApp(App):
    def build(self):
        return Win()


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

.kv文件代码

<Win>
    box1:box1
    BoxLayout:
        size: root.size
        orientation: "vertical"
        BoxLayout:
            size_hint: 1, 5
            ScrollView:
                GridLayout:
                    id:box1
                    orientation: 'tb-lr'
                    height: self.minimum_height
                    size_hint_y: None
                    row_default_height:180
                    spacing: 2
                    cols:1
                    Label:
                        background_color:(150/255, 150/255, 150/255, 1)
                        text:"table"
                        canvas.before:
                            Color:
                                rgba: self.background_color
                            Rectangle:
                                size: self.size
                                pos: self.pos
                    Label:
                        background_color:(150/255, 150/255, 150/255, 1)
                        text:"table"
                        canvas.before:
                            Color:
                                rgba: self.background_color
                            Rectangle:
                                size: self.size
                                pos: self.pos

                    Label:
                        background_color:(150/255, 150/255, 150/255, 1)
                        text:"table"
                        canvas.before:
                            Color:
                                rgba: self.background_color
                            Rectangle:
                                size: self.size
                                pos: self.pos

                    Label:
                        background_color:(150/255, 150/255, 150/255, 1)
                        text:"table"
                        canvas.before:
                            Color:
                                rgba: self.background_color
                            Rectangle:
                                size: self.size
                                pos: self.pos



        BoxLayout:
            size_hint: 1, 1
            Label:
                background_color:(94/255, 94/255, 94/255, 1)
                text:"tab"
                canvas.before:
                    Color:
                        rgba: self.background_color
                    Rectangle:
                        size: self.size
                        pos: self.pos

是的,您可以避免为每个标签编写相同的代码。由于您所有的标签都具有相同的样式,您可以在 .py 文件中创建自定义标签 class:

from kivy.uix.label import Label # Don't forget to import Label class

class CustomLabel(Label):
    pass

然后,在您的 .kv 文件中自定义 class:

<CustomLabel>:
    background_color:(150/255, 150/255, 150/255, 1)
    text:"table"
    canvas.before:
        Color:
            rgba: self.background_color
        Rectangle:
            size: self.size
            pos: self.pos

现在,您可以在 .kv 文件中调用 CustomLabel,而不是为每个标签调用整个代码。下面的示例产生与您已有的相同的结果。

<Win>
    box1:box1
    BoxLayout:
        size: root.size
        orientation: "vertical"
        BoxLayout:
            size_hint: 1, 5
            ScrollView:
                GridLayout:
                    id:box1 
                    orientation: 'tb-lr'
                    height: self.minimum_height
                    size_hint_y: None
                    row_default_height:180
                    spacing: 2
                    cols:1
                    CustomLabel:
                    CustomLabel:
                    CustomLabel:
                    CustomLabel:

如您所见,您只需调用 CustomLabel:

但是,如果您假装添加很多标签,最好的方法是在 python 文件中使用 for 循环。