我可以在 python/kivy 中的 background_color 参数内使用 HSV 颜色吗?

Can I use HSV colors inside a background_color parameter in python/kivy?

我想使用 HSV 定义一些小部件颜色,我可以轻松地在 'Color' 模块中完成,如:

Color((1, 0, 0), mode = 'hsv')

但我的问题是,有时您想要更快、更具体,那么有没有一种方法可以使用 background_color 参数实现相同或相似的效果? 几乎不用说我已经尝试过但失败了:

my_hsv_color = Color((0.5, 1, 0.6), mode='hsv')
my_button = Button(background_color = my_hsv_color)

Color 是一个 class 或更好地说,你传递给 background_color 的东西是 Color(对象)的一个实例。 background_color 需要 list/tuple 或其他可迭代的东西。

Color 即 class 具有这样的属性 right here 并且由于 Kivy 在 0.0 - 1.0 的间隔内使用 rgba,您需要将 属性 与rgbrgba.

from kivy.lang import Builder
from kivy.base import runTouchApp
from kivy.uix.boxlayout import BoxLayout
Builder.load_string('''
#:import Color kivy.graphics.Color
<Test>:
    Button:
        background_color: tuple(Color(0.5, 1, 0.6, mode='hsv').rgba)
''')
class Test(BoxLayout): pass
runTouchApp(Test())

我什至认为你可以在 Python 3:

中使用这种解包
background_color: *Color(0.5, 1, 0.6, mode='hsv').rgba

使用上面的 KeyWeeUsr 答案,我想出了在 background_color 参数 (Python 2.7) 中使用 HSV 的两个简单解决方案:

加长版:

with self.canvas:
        Rectangle(size = (250,250), background_color = tuple(Color(1,1,1, mode='hsv').rgba))

或者用一个简单的函数:

def HSVtoRGB(color1,color2,color3):
    from kivy.graphics import Color
    return tuple(Color(color1, color2, color3, mode='hsv').rgba)

这样使用它:

with self.canvas:
        Ellipse(size = (250,250), background_color = HSVtoRGB(0.5,0.7,1)