#kivy
#kivy
Вопрос:
Я ищу способ установить цвета для интерфейса и серверной части в одном месте. Пусть это будет словарь, как в приведенном ниже коде. Когда я запускаю программу, я не хочу, чтобы она устанавливала цвета для kv
строки, не требуя, чтобы она жестко кодировала ее в этой строке как #:set main_bcolor hex('#f4f8fb')
. Если это возможно, это было бы очень полезно и чисто, поскольку мне не нужно повторять определения цвета.
код
from kivy.config import Config
Config.set('graphics', 'multisamples', '0')
Config.set('graphics', 'width', '1280')
Config.set('graphics', 'height', '720')
from kivy.utils import get_color_from_hex
from kivy.app import App
from kivy.lang.builder import Builder
colors = {
'main_bcolor' : get_color_from_hex('#f4f8fb'),
'active_bcolor': get_color_from_hex('#cde2fc')
}
kv = """
<Dir@BoxLayout>
orientation: 'vertical'
canvas.before:
Color:
rgba: (0, 0, 0, 1) if main_bcolor is None else main_bcolor
Rectangle:
pos: self.pos
size: self.size
Dir:
"""
class RemoteDir(App):
def build(self):
for color in colors.items():
print('Setting color for frontend and backend', color[0], color[1])
return Builder.load_string(kv)
if __name__ == '__main__':
RemoteDir().run()
Ответ №1:
Удобный способ сделать это — создать a DictProperty
, на который можно ссылаться в ‘kv’:
from kivy.config import Config
from kivy.properties import DictProperty
Config.set('graphics', 'multisamples', '0')
Config.set('graphics', 'width', '1280')
Config.set('graphics', 'height', '720')
from kivy.utils import get_color_from_hex
from kivy.app import App
from kivy.lang.builder import Builder
kv = """
<Dir@BoxLayout>
orientation: 'vertical'
canvas.before:
Color:
rgba: app.colors['main_bcolor']
Rectangle:
pos: self.pos
size: self.size
Dir:
"""
class RemoteDir(App):
colors = DictProperty({
'main_bcolor' : get_color_from_hex('#f4f8fb'),
'active_bcolor': get_color_from_hex('#cde2fc')
})
def build(self):
return Builder.load_string(kv)
if __name__ == '__main__':
RemoteDir().run()