在 Kivy 中更改按钮的背景颜色

2022-01-15 00:00:00 python kivy

问题描述

我是 Kivy 的新手,无法指定按钮的背景颜色.这是我的简单示例:

I'm new to Kivy and having trouble specifying the background color of a Button. Here's my simple example:

# custombutton.py

from kivy.app import App
from kivy.uix.widget import Widget


class MyWidget(Widget):
    pass


class CustomButtonApp(App):
    def build(self):
        return MyWidget()


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

以及随附的kv文件custombutton.kv:

#:kivy 1.7.2

<MyWidget>:
    canvas:
        Color:
            rgb: (0.93, 0.93, 0.93)
        Rectangle:
            pos: self.pos
            size: self.size

    Button:
        center: self.parent.center
        font_size: 14
        height: 28
        background_color: (1.0, 0.0, 0.0, 1.0)
        text: "I'm a Button"

我确定我遗漏了一些明显的东西,但我已经搞砸了一个多小时,却一无所获.该按钮似乎被染成了深红色:

I'm sure I'm missing something obvious, but I've been messing with this for over an hour now and getting nowhere. The button seems to get colored a hint of very dark red:

这不是为 Kivy 中的按钮指定背景颜色的方法吗?

Is this not the way to specify the background color for a Button in Kivy?

谢谢!


解决方案

啊,这是一个常见的混淆.问题是 Button.background_color 确实是一种 tint,而不仅仅是块颜色.由于默认背景是灰色图像(您通常会在制作无样式按钮时看到该图像),因此您最终看到的是该灰色图像的红色调 - 您观察到的暗红色.

Ah, this is a common confusion. The problem is that Button.background_color really works as a kind of tint, not just a block colour. Since the default background is a grey image (the one you normally see if you make an unstyled button), what you end up seeing is a red tint to that grey image - which comes out as the dark red you observe.

您可以通过将背景图像替换为纯白色(不必超过几个像素)或使用 background_normal 来获得所需的行为和 background_down 属性.当您的 background_color 为新的纯白色图像着色时,您将获得所需的纯红色.

You can get the behaviour you want by replacing the background image to just one that's plain white (it doesn't have to be more than a few pixels), or by otherwise playing with the background_normal and background_down properties. When your background_color tints the new pure white image, you get the pure red you're after.

我想这在文档中不是很清楚,我会尝试改进它.

I guess this isn't so clear in the docs, I'll try to improve it.

相关文章