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 小部件的继承,所有定义的属性都将可用,例如sizesize_hintcolormarkup

片段 - 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 定义标签的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

Python Kivy - 更改标签颜色

Kivy:更改 ActionBar 的背景颜色

Kivy 选项卡式面板不会更改背景颜色

有没有办法让 kivy 中的 TextInput 中的文本颜色依赖于背景?

自定义标签栏背景颜色。如何更改标签栏背景的颜色?

如何根据焦点设置 Kivy TextInput 背景颜色