如何在 .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
循环。
我的问题是我想添加多个标签而不必重复那么多行代码。我已经搜索了很长时间的解决方案,但我所看到的只是在 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
循环。