top of page

Приложение на Android. Python. KivyMD

Раньше я уже писал, что написал для себя полноценное десктопное приложение-менеджер заметок на Python+PyQT5, и в конце намекал на то, что надо бы его "портировать" на Android.

И даже был скрин первого прототипа. Однако, учитывая, что у меня был ужасно слабый (даже для своего времени) ноутбук 2011 года, на котором Android Studio запускалось около 10 минут и ровно столько же билдило приложение. А процесс редактирования был долгим и унылым в силу мощности ноутбука.

Плюс, мне, как для человека, немного разобравшимся с "python for pc", было тяжеловато перейти на разработку под Android. Сама Java, в принципе, вопросов не вызывала, но именно андроид-логика (всякие активити, интенты, передачи из одного окна в другое и получение, и прочее) были для меня тогда ужасно сложным занятием.

Потом мы с другом надумали попробовать на Kotlin (а он тогда только набирал популярность), вроде полегче должно быть. Потом вообще решили переделать полностью, делать типа как веб приложение, хранящие данные в json... Все ради постоянной синхронизации а-ля "Google Keep".

Вариантов было куча.

Но как-то не срослось, к последними я даже не стал приступать. Все-таки мне интересен Python сам по себе. И его универсальность) Вот я и решил проверить эту самую универсальность, и, собственно, себя тоже. Так как это дело было для меня в новинку.

Итак. Есть замечательный фреймворк, который называется Kivy. На их официальном сайте есть документация. Суть в том, что он позволяет писать на Python приложения на другие платформы, в том числе и Android.

И я решил к этому делу приобщиться. Единственное, что смущало - интерфейс. Интерфейс на Kivy уж очень похож на приложения времен Android 4.1(примерно 2012 года).

К примеру , вот демонстрация виджетов.

Свою работу, они, конечно выполняют. Работают на андроиде "нативно". Но... Некрасиво же. 2020 год заканчивается. Android 11 вышел... Концепция Material Design в ходу уже во всем Интернете...


К счастью, решение нашлось. (Много?)страдальный форк библиотеки Kivy, который базируется на ней же, но переделывает ее в современный вид. Как на странно, называется KivyMD (Kivy Material Design). Статьи по ней легко находятся в Интернете. Также у нее вполне понятная документация.

К примеру, так выглядит боковая панель, как в Google Play:


Впечатлившись этим действием, я начал делать первые попытки.

Стоит признать, что не все прошло гладко. Программирование на Kivy состоит из 2 вещей: логика в Python-файле и интерфейс (разметка) в kv-файле. Я же, по привычке, делал все через код. Все, что мог. 90% находится в коде. Впрочем, я ж не на продакшн работаю - для себя) Какая мне разница, лишь бы работало. Моей задачей было максимально быстро перенести программу.

Установив на компьютер все необходимые компоненты, я начал потихоньку все это писать. Основная проблема было лишь правильно указать все зависимости в spec-файле для билдера и настроить виртуалку (для компиляции apk нужен linux). В итоге, вот что из этого получилось.

Каждый раздел находится в отдельном окне, переключение между которыми идет через боковое меню. Каждый экран имеет соответствующие вкладки:


Конечно, боковуха пока довольно некрасива, но пока что я не уделял внимание дизайну, только работоспособности:


При нажатии на имя заметки открывается ее содердимое:


Чекбокс нужен для изменения содержимого заметки:

Ну а в меню архивации собственно есть возможность управления локальными и онлайн-бекапами, все как в десктопной версии:


Вся прелесть в том, что это - все еще код на Python. Т.е. это - идеальный вариант, когда есть готовая программа. Вы просто берете всю свою логику и переносите практически 1 в 1, делая поправку на переписанный интерфейс. Половина работы скошена =)

Например, вот код получения списка всех заметок в папке на PyQT5:

# Функция получения списка всех песен
    def all_songs_getnames(self, QWidget, path):
        self.path = path
        self.object = QWidget
        self.object.clear()
        for currentFile in self.path.iterdir():
            name = os.path.split(currentFile)  # разделение пути на адрес и имя файла
            base = name[1]  # присвоение base имя файла
            os.path.splitext(base)  # делю остаток на 2 части, отсеиваю расширение с точкой
            filename = os.path.splitext(base)[0]  # вот и само имя
            self.object.addItem(filename)

А вот точно такой же код, только из KivyMD-версии:

def notes_getnames(self, path, widget, iconname):
        # удаляем старые
        widget.clear_widgets()
        # перебираем все файлы и заносим названия в self.list
        for currentFile in path.iterdir():
            name = os.path.split(currentFile)  # разделение пути на адрес и имя файла
            base = name[1]  # присвоение base имя файла
            os.path.splitext(base)  # делю остаток на 2 части, отсеиваю расширение с точкой
            filename = os.path.splitext(base)[0]  # вот и само имя
            item = ListItemWithRadiobutton(text=filename, icon=iconname)
            item.on_release = partial(self.showtext, path, filename)
            widget.add_widget(item)

Конечно, еще есть что допиливать, но главный вывод: python+android=alive!

И это здорово.


Я в соцсетях
  • Vkontakte Social Icon
  • Facebook Social Icon
  • YouTube Social  Icon
Новые записи
bottom of page