Динамические классы
Пользовательский класс в Kivy еще называют динамическим классом. Динамический класс создается на основе базового класса, при этом для него можно сразу определить свой набор свойств. Например, в контейнере BoxLayout имеется три кнопки, для которых заданы идентичные свойства:
BoxLayout:
Button:
text: "Кнопка 1"
pos_hint: {'center_x':.5, 'center_y':.6}
font_size: '25sp'
markup: True
Button:
text: "Кнопка 2"
pos_hint: {'center_x':.5, 'center_y':.6}
font_size: '25sp'
markup: True
Button:
text: "Кнопка 3"
pos_hint: {'center_x':.5, 'center_y':.6}
font_size: '25sp'
markup: True
Для того чтобы не повторять многократно задание одних и тех же свойств каждому элементу, можно сформировать динамический класс и в нем один раз задать этот набор свойств:
<MyButton@Button>:
pos_hint: {'center_x':.5, 'center_y':.6}
font_size: '25sp'
markup: True
BoxLayout:
MyButton:
text: "Кнопка 1"
MyButton:
text: "Кнопка 2"
MyButton:
text: "Кнопка 3"
Не вдаваясь в смысл этих свойств, проверим это на простом примере:
Пример использования динамического класса
from kivy. app import App
from kivy.lang import Builder
KV = '''
<MyButton@Button>:
pos_hint: {'center_x':.5, 'center_y':.6}
font_size: '25sp'
markup: True
BoxLayout:
orientation: "vertical"
MyButton:
text: "Кнопка 1"
MyButton:
text: "Кнопка 2"
MyButton:
text: "Кнопка 3"
'''
class MainApp (App):
def build (self):
return Builder.load_string(KV)
if __name__ == '__main__':
MainApp().run()
В этом программном коде создан динамический класс MyButton на основе базового класса Button. Для класса MyButton один раз заданы три свойства. Затем в контейнер BoxLayout, помещаются три кнопки MyButton, для которых задается всего одно свойство – text. Все остальные свойства этих кнопок будут наследованы от динамического класса MyButton@Button. Таким образом, программный код упрощается и сокращается количество строк. После запуска приложения получим следующий результат: