Есть два способа объединения фрагментов программного кода на Python и KV:
– Метод соглашения имен;
– Использование загрузчика Builder.
Рассмотрим два этих способа на простейших примерах.
2.3.1. Компоновка приложения из фрагментов методом соглашения имен
Допустим, что приложение состоит из двух программных модулей: базовый модуль на языке Python, и модуль с деревом виджетов на языке KV. В базовом модуле приложения на языке Python всегда создается базовый класс, при этом используется зарезервированный шаблон имени – Class_nameApp. Модуль с деревом виджетов на языке KV так же имеет зарезервированный шаблон имени – «class_name. kv». В этом случае базовый класс Class_nameApp ищет». kv» – файл с тем же именем, что и имя базового класса, но в нижнем регистре и без символов APP. Например, если базовый класс приложения имеет имя – «My_ClassAPP», то файл с кодом на языке KV должен иметь имя «my_class. kv». Если такое совпадение имен обнаружено, то программный код, содержащийся в этих двух файлах, будет объединен в одно приложение. Рассмотрим использования этого метод на примере (листинг 2.13).
Листинг 2.13. Демонстрация метода соглашения имен (главный модуль приложения, модуль Soglashenie_Imen.py)
# модуль Soglashenie_Imen.py
from kivy. app import App # импорт класса – приложения
class Basic_Class (App): # определение базового класса
…… pass
My_App = Basic_Class () # приложение на основе базового класса
My_App.run () # запуск приложения
В этом модуле просто создан базовый класс Basic_Class, внутри которого нет выполнения каких либо действий. Теперь создадим файл с именем basic_class. kv и размести в нем следующий код (листинг 2.14).
Листинг 2.14. Текстовый файл, модуль basic_class. kv
# файл basic_class. kv
Label:
…… text: Метка из файла basic_class. kv’
…… font_size: ’16pt’
В этом коде мы создали метку (Label), и свойству метке (text) присвоили значение – «Метка из файла basic_class. kv’, указали размер шрифта, которым нужно вывести на экран данный текст – ’16pt’. Теперь запустим наше приложение и получим следующий результат (рис.2.14).
Рис. 2.14.Окно приложения Basic_Class при наличии файла basic_class. kv
Здесь сработал метод соглашения имен, который работает следующим образом:
– По умолчанию при запуске программного модуля базовый класс приложения (Basic_Class) ищет файл с именем – basic_class. kv.
– Если такой файл в папке с приложением имеется, то описанные там визуальные элементы выводятся на экран.
Таким образом, в Kivy реализован первый способ объединения фрагментов приложения, расположенных в разных файлах. Если использовать данный способ, то необходимо выполнять одно важное условие – файл с именем – basic_class. kv должен находиться в то же папке приложения, где находится программный модуль с базовым классом (в нашем случае файл с именем Soglashenie_Imen.py).
2.3.2. Компоновка приложения из фрагментов с использованием загрузчика Builder
Чтобы использовать загрузчик Builder, сначала необходимо выполнить его импорт с использованием следующего кода:
from kivy.lang import builder
Теперь с помощью Builder можно напрямую загрузить код на языке KV либо из текстового файла проекта с любым именем (но с расширением. kv), либо из текстовой строки базового программного модуля.
Сделать загрузку виджетов из файла. kv можно с использованием следующей команды:
Builder. load_file (». Kv/file/path»)
Сделать загрузку виджетов из текстовой строки программного модуля можно с использованием следующей команды:
Builder. load_string (kv_string)
Рассмотрим это на простых примерах. Напишем программный код для загрузки кода на языке KV из текстового файла проекта, файл Metod_Builder.py (листинг 2.15).
Листинг 2.15. Демонстрация метода Builder (загрузка кода на KV из текстового файла) модуль Metod_Builder.py
# модуль Metod_Builder.py
from kivy. app import App # импорт класса – приложения
from kivy.lang import Builder # импорт метода Builder
kv_file = Builder. load_file (». /basic_class. kv»)
class Basic_Class (App): # определение базового класса
…… def build (self):
…… … … return kv_file
My_App = Basic_Class () # приложение на основе базового класса
My_App.run () # запуск приложения
Здесь мы создали переменную kv_file и, с использованием метода Builder. load_file, загрузили в нее код из файла». /basic_class. kv’, который находится в головной папке проекта. Затем в базовом классе создали функцию def build (self), которая возвращает значение переменной kv_file. Результат работы приложения будет таким же, как приведено на предыдущем рисунке. При использовании данного метода явным образом задается путь к файлу basic_class. kv, поэтому, в отличие от метода соглашения имен, данный файл может находиться в любой папке проекта и иметь любое имя.
Читать дальше