Kivy 定义标签的背景颜色
Posted
技术标签:
【中文标题】Kivy 定义标签的背景颜色【英文标题】:Kivy define background color of label 【发布时间】:2019-11-28 19:36:43 【问题描述】:我在为 Python 的 Kivy 语言定义各种对象(在此示例中为标签)的背景颜色时遇到了麻烦。附加代码创建了一个盒子布局,其中每个盒子都有特定的背景颜色。
-
如何调整此代码,以便我可以通过变量定义特定标签的大小,而不是对其进行硬编码。如果我们能想出这样的解决方案,那就最好了:
ForeignLanguage = ColoredLabel(..., size = (a,b))
-
我的代码对我来说似乎很复杂。是否可以以更简单的方式设置标签的背景颜色,例如 Label(..., background_color = (1,1,1,1))?
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.properties import ListProperty
from kivy.lang import Builder
from kivy.core.window import Window
kv = '''
<ColoredLabel>:
size: (self.size_x,self.size_y)
pos: (0,0) # no effect
background_color:
canvas.before:
Color:
rgba: self.background_color
Rectangle:
pos: self.pos
size: (self.size_x,self.size_y)
'''
Builder.load_string(kv)
class ColoredLabel(Label):
background_color = ListProperty((0,0,0,1))
s_global = Window.size
size_x = s_global[0]
size_y = s_global[1]/3
class MyWidget(BoxLayout):
#init
def __init__(self, **kwargs):
super().__init__(**kwargs)
ForeignLanguage = ColoredLabel(text="ForeignLanguage", size_hint=(None, None), background_color=(0/255,171/255,169/255, 1))
Translation = ColoredLabel(text="Translation", size_hint=(None, None), background_color=(45/255,137/255,239/255, 1))
Example = ColoredLabel(text="Example", size_hint=(None, None), background_color=(43/255,87/255,151/255, 1))
verticalBox = BoxLayout(orientation='vertical')
verticalBox.add_widget(ForeignLanguage)
verticalBox.add_widget(Translation)
verticalBox.add_widget(Example)
self.add_widget(verticalBox)
class BoxLayoutDemo(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
BoxLayoutDemo().run()
【问题讨论】:
更新标签大小有什么问题? @inclement 我必须在 ColoredLabel 类中硬编码 size_y。但是当我使用“ForeignLanguage = ColoredLabel(...,size_x = a and size_y = b)”时,我想调整 size_x 和 size_y 【参考方案1】:问题 1
如何调整这段代码,以便我可以定义 通过变量确定标签,而不是对其进行硬编码。最好是 如果我们能想出这样的解决方案:
ForeignLanguage = ColoredLabel(..., size = (a,b))
回答
只需在您的 kv 文件中包含以下设计。随着 Label 小部件的继承,所有定义的属性都将可用,例如size
、size_hint
、color
、markup
等
片段 - kv 文件
<ColoredLabel>:
canvas.before:
Color:
rgba: root.background_color
Rectangle:
pos: self.pos
size: self.size
问题 2
我的代码对我来说似乎很复杂。是否可以设置 以更简单的方式设置标签的背景颜色,例如 Label(..., background_color = (1,1,1,1))?
回答
您的代码看起来不错。
片段 - py 文件
ForeignLanguage = ColoredLabel(text="ForeignLanguage", size_hint=(None, None), size=(300, 40),
background_color=(1, 0, 0, 1))
Translation = ColoredLabel(text="Translation", size_hint=(None, None), size=(100, 30),
background_color=(0, 1, 0, 1))
Example = ColoredLabel(text="Example", size_hint=(None, None), size=(200, 20),
background_color=(0, 0, 1, 1))
输出
【讨论】:
以上是关于Kivy 定义标签的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章