Ключевое слово //app// позволяет обратиться к элементу, который относится к приложению. Это эквивалентно вызову функции, которая находится в коде приложения, написанного на Python. Рассмотрим это на простейшем примере.
from kivy. app import App
from kivy.lang import Builder
KV = '''
BoxLayout:
orientation: 'vertical'
Button:
text: "Кнопка1"
on_press: app.press_button (self.text)
Button:
text: "Кнопка2"
on_press: app.press_button (self.text)
Label:
id:lb1
text: app.name
'''
class MainApp (App):
def build (self):
return Builder.load_string(KV)
def press_button (self, instance):
self.root.ids.lb1.text="Вы нажали на кнопку: " + instance
if __name__ == '__main__':
MainApp().run()
В этом модуле создан корневой виджет BoxLayout. Затем в корневой виджет вложено три элемента – две кнопки (Button) и метка (Label). Событие нажатия кнопки (//on_press//), будет обработано функцией ''press_button''. Эта функция находится в приложении //Main//, поэтому
перед именем функции стоит префикс //app// – ''app.press_button (self. text)''. То есть в данной строке указано, что мы через префикс app
обращаемся к приложению Main, в частности к функции press_button, и передаем в эту функцию свойство //text// данной кнопки (''self.text'').
Метка Label имеет свойство text. Этому свойству через префикс app по умолчанию присваивается имя приложения (Main). Получается, что с использованием префикса app кнопка обратилась к функции приложения и передала ему свое свойство, а метка Label получила значение своего свойства из приложения Main.
В методе //press_button//, который вызывается при нажатии на одну из кнопок, меняется текст в метке, для обращения к которой приходится использовать конструкцию ''self.root.ids.lb1'', где в данном случае
* [[kivy:self|self]] - ссылка на MainApp
* [[kivy:root|root]] - корневой виджет BoxLayout
* [[kivy:ids|ids]] - идентификаторы в пределах корневого виджета
* lb1 - идентификатор метки
После запуска данного модуля получим следующий результат:
{{ :kivy:008.png?400 |}}