2016-12-05 11 views
1

Я хочу использовать HSV для определения некоторых виджетов цвета, я могу сделать это легко модуль в «цвет», как в:Могу ли я использовать цвета HSV внутри параметра background_color в python/kivy?

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) 

ответ

0

Color класс или лучше сказать, то, что вы передаете background_color является экземпляром Color (объекта). Для background_color требуется список/кортеж или что-то еще, что итерабельно.

Color т.е. класс имеет такие свойства right here и так Kivy работает с RGBA в интервале 0.0 - 1.0, вам нужно кормить свойство с rgb или rgba.

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 
+0

Он работал, спасибо. Но с помощью кода я встречаю еще одну проблему, когда я пытаюсь получить доступ к данным из кода .kv как в: 'my_color = my_color_holder.ids.my_color_holderkv.background_color' Kivy открывает файл с расширением .exe вместе с .py-файлом с пустым белым экраном, знаете ли вы, как его обойти? – Mitrek

+0

Я думаю, что причина заключается в повторном импортировании 'Color' в' .kv'-файле, который уже импортирован _is_, но я не вижу другого окна. Рассмотрите возможность обновления до версии 1.9.2, если вы используете версию 'stable' (1.9.1). – KeyWeeUsr

1

Использование KeyWeeUsr ответа выше, я придумал с этими двумя простыми решениями использовать HSV в background_color В параметре (Python 2.7):

расширенная версия:

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

Или с помощью простого фу nction:

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)