Python 带有背景色的标签,容器作为屏幕显示背景色

Python 带有背景色的标签,容器作为屏幕显示背景色,python,kivy,Python,Kivy,我试图有一个背景颜色的标签。基本上,它看起来像一个标签,上面有一个不同颜色的矩形。如果我将父项用作小部件,这完全可以,但如果我将父项更改为屏幕,因为我需要使用屏幕,则彩色矩形即背景色或标签将消失。我能给你一些建议。下面是这两个项目的代码。 1.使用小部件容器 2.不使用屏幕容器问题是,在创建小部件之前,您不会加载kv规则。如果您先加载它们,它可以正常工作 您可以随时加载规则,而不仅仅是在build()中。因此,您只需从build()中删除Builder.load_string(kvCode),然

我试图有一个背景颜色的标签。基本上,它看起来像一个标签,上面有一个不同颜色的矩形。如果我将父项用作小部件,这完全可以,但如果我将父项更改为屏幕,因为我需要使用屏幕,则彩色矩形即背景色或标签将消失。我能给你一些建议。下面是这两个项目的代码。 1.使用小部件容器
2.不使用屏幕容器问题是,在创建小部件之前,您不会加载kv规则。如果您先加载它们,它可以正常工作

您可以随时加载规则,而不仅仅是在
build()
中。因此,您只需从
build()
中删除
Builder.load_string(kvCode)
,然后将
kvCode=('''
更改为
Builder.load_string('''
)。我在创建的每个小部件文件的顶部放置了一个
Builder.load_string()

此外,Kivy支持更先进的财产设置,这将更好地工作。以下是我们的方法:

from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.properties import BoundedNumericProperty, ReferenceListProperty
from kivy.uix.label import Label

Builder.load_string('''
<BackgroundWidget>:
    canvas.before:
        Color:
            rgba: self.background_color
        Rectangle:
            size: root.size
            pos: root.pos
''')

class BackgroundWidget(Widget):
    '''BackgroundWidget class
    '''

    background_color_r = BoundedNumericProperty(0., min=0., max=1.)
    background_color_g = BoundedNumericProperty(0., min=0., max=1.)
    background_color_b = BoundedNumericProperty(0., min=0., max=1.)
    background_color_a = BoundedNumericProperty(0., min=0., max=1.)

    background_color = ReferenceListProperty(background_color_r, background_color_g, background_color_b, background_color_a)

class BackgroundLabel(BackgroundWidget, Label): pass
来自kivy.uix.widget导入小部件
从kivy.lang导入生成器
从kivy.properties导入BoundedNumericProperty、ReferenceListProperty
从kivy.uix.label导入标签
Builder.load_字符串(“”)
:
在以下情况之前:
颜色:
rgba:self.background\u颜色
矩形:
大小:root.size
pos:root.pos
''')
类BackgroundWidget(小部件):
''背景Widget类
'''
背景颜色=BoundedNumericProperty(0,最小值=0,最大值=1。)
背景颜色边界数值属性(0,最小值=0,最大值=1)
背景颜色b=BoundedNumericProperty(0,最小值=0,最大值=1。)
背景颜色a=BoundedNumericProperty(0,最小值=0,最大值=1。)
background\u color=ReferenceListProperty(background\u color\r、background\u color\g、background\u color\b、background\u color\u a)
类BackgroundLabel(BackgroundWidget,Label):通过

您可以分别更改或设置每个颜色组件的动画,颜色值会受到适当的约束,
BackgroundWidget
是一种混合,它可以向任何小部件(如
BackgroundLabel
)添加背景功能。

您可以粘贴导入行吗?(还有……为什么人们总是忽略这些?)@添加了恶劣的导入行。这个答案真的很有帮助。我还在学习kivy。在小部件之后加载生成器字符串是一个非常严重的错误,我非常感谢您的帮助,告诉我一个更好的方法来设置标签背景的动画。
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.properties import BoundedNumericProperty, ReferenceListProperty
from kivy.uix.label import Label

Builder.load_string('''
<BackgroundWidget>:
    canvas.before:
        Color:
            rgba: self.background_color
        Rectangle:
            size: root.size
            pos: root.pos
''')

class BackgroundWidget(Widget):
    '''BackgroundWidget class
    '''

    background_color_r = BoundedNumericProperty(0., min=0., max=1.)
    background_color_g = BoundedNumericProperty(0., min=0., max=1.)
    background_color_b = BoundedNumericProperty(0., min=0., max=1.)
    background_color_a = BoundedNumericProperty(0., min=0., max=1.)

    background_color = ReferenceListProperty(background_color_r, background_color_g, background_color_b, background_color_a)

class BackgroundLabel(BackgroundWidget, Label): pass