Ключевые слова //ids// (идентификаторы) и //id// (идентификатор) используются для идентификации виджетов. С использованием ключевого слова id можно любому виджету назначить уникальное имя (идентификатор). Это имя можно использовать для ссылок на виджет, то есть обратиться к нему в коде на языке KV. Рассмотрим следующий код: Button: id: but1 text: "Кнопка 1" Label: text: but1.text В этом коде создано два элемента интерфейса: виджет Button (кнопка), и виджет Label (метка). Кнопке через ключевое слово //id// присвоено уникальное имя – //but1//, через которое теперь можно обращаться к свойствам данного элемента. Свойству text метки Label присвоено значение ''but1.text''. То есть метка обратилась к кнопке //bat1// и получила от кнопки значение его свойства text. В итоге метка покажет на экране текст "Кнопка 1". Рассмотрим это на простейшем примере: from kivy. app import App from kivy.lang import Builder KV = ''' BoxLayout: orientation: 'vertical' Button: id: bt1 text: "Кнопка 1" on_press: lb1.text = bt1.text Button: id: bt2 text: "Кнопка 2" on_press: lb1.text = bt2.text Label: id: lb1 text: "Метка" on_touch_down: self.text = "Метка" ''' class MainApp (App): def build (self): return Builder.load_string(KV) if __name__ == '__main__': MainApp().run() В этом модуле создан корневой виджет BoxLayout. Затем в корневой виджет вложено три элемента: две кнопки Button, и метка Label. Кнопки имеют идентификаторы "bt1" и "bt2", а метка идентификатор "lb1". При касании кнопки bt1 (событие on_press) свойству метки text будет присвоено значение аналогичного свойства кнопки bt2, что запрограммировано в выражении: on_press: lb1.text = bt1.text При касании кнопки bt2 (событие ''on_press'') свойству метки text будет присвоено значение аналогичного свойства кнопки bt2, что запрограммировано в выражении: on_press: lb2.text = bt2.text При касании метки lb1 (событие ''on_touch_down'') свойству метки text будет присвоено значение "Метка", что запрограммировано в выражении: on_touch_down: self.text = "Метка" В итоге после касания всех элементов содержание метки будет меняться. {{ :kivy:010.png?400 |}} С использованием ключевого слова //ids// можно из кода на Python обратиться к виджету, который создан в разделе программы в коде на KV. from kivy. app import App from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout KV = ''' box: Button: text: "Кнопка 1" on_press: root.result ("Нажата кнопка") Label: id: lb1 text: "Метка" ''' class box (BoxLayout): def result (self, entry_text): self.ids["lb1"].text = entry_text class MainApp (App): def build (self): return Builder.load_string(KV) if __name__ == '__main__': MainApp().run() Здесь во фрагменте модуля, написанного на Python, создан пользовательский класс //box// на основе базового класса BoxLayout. Это по своей сути контейнер, в который на языке KV вложено два элемента: кнопка Button и метка Label, которая имеет имя (идентификатор) //lb1//. При касании кнопки возникает событие (on_press). Это событие обрабатывается в корневом виджете root, в функции result, куда передается текст "Нажата кнопка". В функции //result// этот текст принимается в параметр //entry_text//. А вот в следующей строке как раз происходит использование ключевого слова ids: self.ids["lb1"].text = entry_text Эта строка говорит о том, что свойству text элемент корневого виджета с именем (идентификатором) ''["lb1"]'' нужно присвоить значение параметра entry_text. Поскольку данному параметру будет передано значение "Нажата кнопка", то этот текст отобразится на экране. Альтернативно можно использовать синтаксис: self.ids.lb1.text = entry_text {{ :kivy:011.png?400 |}} Рассмотрим использование идентификаторов виджетов для обмена параметрами между фрагментами кода на языке KV и на Python, на развернутом примере простейшего калькулятора. from kivy.app import App from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout KV=''' box: id:root_widget orientation:'vertical' TextInput: id:entry font_size:32 miltiline:False Button: text:"=" font_size:64 on_press:root_widget.result(entry.text) Label: id:total text:"Итого" font_size:64 ''' class box(BoxLayout): def result(self,entry_text): if entry_text: try: result=str(eval(entry_text)) self.ids["total"].text=result except Exception: self.ids["total"].text="Ошибка" class MainApp(App): def build(self): return Builder.load_string(KV) MainApp().run() В этом модуле создан базовый класс приложения MainApp, который обеспечивает запуск приложения, и пользовательский класс box на основе базового класса BoxLayout (контейнер – коробка). В этом классе создана функция //result//, в которой происходят вычисления. В коде на языке KV созданы следующие элементы интерфейса: * корневой виджет box (id: root_widget); * поле для ввода текста TextInput (id: entry); * кнопка для запуска процесса выполнения расчетов; * метка Label для вывода на экран результатов расчета (id: total). С использованием имен-идентификаторов происходит обмен данными межу фрагментами кода на языке KV и на Python. После запуска приложения получим следующий результат: {{ :kivy:012.png?400 |}}