簡體   English   中英

在 Kivy 中更改按鈕的背景顏色

[英]Changing the background color of a Button in Kivy

我是 Kivy 的新手,無法指定按鈕的背景顏色。 這是我的簡單示例:

# 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"

我確定我遺漏了一些明顯的東西,但是我已經把這個搞砸了一個多小時,卻一無所獲。 該按鈕似乎被染成了深紅色:

在此處輸入圖像描述

這不是為 Kivy 中的按鈕指定背景顏色的方法嗎?

謝謝!

啊,這是一個常見的混淆。 問題是Button.background_color確實是一種tint ,而不僅僅是塊顏色。 由於默認背景是灰色圖像(如果您制作一個未設置樣式的按鈕,您通常會看到該圖像),您最終看到的是該灰色圖像的紅色調 - 您觀察到的暗紅色。

您可以通過將背景圖像替換為純白色(不必超過幾個像素)或使用background_normalbackground_down屬性來獲得所需的行為。 當您的 background_color 為新的純白色圖像着色時,您將獲得所需的純紅色。

我想這在文檔中不是很清楚,我會嘗試改進它。

自從首次發布以來已經有一段時間了,所以也許隨着更新他們想出了一個更好的解決方案:

Button:
    background_normal: ''
    background_color: 1, .3, .4, .85

由於 Button 具有默認灰色,因此添加背景顏色只會使按鈕着色。 通過將 background_normal 設置為 '' 將默認設置為白色。 在白色畫布上, background_color 可以按您的預期工作。

文檔

1) https://kivy.org/docs/api-kivy.uix.button.html?highlight=button#module-kivy.uix.button

使用background_normal = ''的問題在於它會吹走帶有凸起邊緣/陰影和挫折的 kivy 按鈕圖像。 獲得特定顏色的凸起按鈕的一種方法是使用 gimp 或其他編輯器制作自己的圖集。 但是,通過一些試驗和錯誤,我發現 Button background_color屬性可以實現色調以及記錄的陰影。 換句話說,它的 'RGB' 值可以 > 1。因此,要使用 kivy 按鈕默認主題為凸起邊緣獲得精確的按鈕顏色,請使用:

import numpy as np
# the defaulttheme for kivy buttons is grey 88,88,88
kivy_defaulttheme_color = np.array([88,88,88,256])/256
desired_button_color = np.array([78,101,115,256])/256
tintshade_color = desired_button_color / kivy_defaulttheme_color
Button(background_color = tintshade_color)

它展示了色調和陰影。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM