如何在Kivy中为Label添加背景颜色?

时间:2017-03-15 21:14:00

标签: python kivy

使用Kivy,如何在Python中更改标签的背景颜色而不是使用Kv语言?

我试过这个:

with self.canvas:
    Color(1., 0, 0)
    Rectangle(pos=(10, 10), size=(500, 500))

然而,这只会在屏幕左下角创建一个红色方块。如果有上述想法的替代方案并且我可以使用python而不是kv语言更改标签的背景颜色,那将非常有用。

1 个答案:

答案 0 :(得分:5)

嗯,Rectangle位置和大小应该与Label位置和大小匹配:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.graphics import Color, Rectangle

class MyApp(App):
    def build(self):
        layout = FloatLayout()
        label = Label(
            text='test',
            pos=(20, 20),
            size=(180, 100),
            size_hint=(None, None))
        with label.canvas:
            Color(0, 1, 0, 0.25)
            Rectangle(pos=label.pos, size=label.size)

        layout.add_widget(label)

        return layout


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

带自动调整的版本:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.graphics import Color, Rectangle

class MyLabel(Label):
    def on_size(self, *args):
        self.canvas.before.clear()
        with self.canvas.before:
            Color(0, 1, 0, 0.25)
            Rectangle(pos=self.pos, size=self.size)

class MyApp(App):
    def build(self):
        layout = FloatLayout()
        label = MyLabel(
            text='test',
            pos=(20, 20),
            size_hint=(0.5, 0.5))
        layout.add_widget(label)
        return layout


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