- PVSM.RU - https://www.pvsm.ru -

Python в Mobile development

Python в Mobile development - 1

Ни для кого не секрет, что область применения Python довольно широка: начиная от web-технологий, игровой индустрии и заканчивая проектами NASA. Python работает практически везде: от карманных компьютеров и смартфонов до серверов сети и практически на всех известных платформах, таких как Windows, Linux/UNIX, macOS, Palm OS, Raspberry PI и так далее. Благодаря фреймворку Kivy [1] в 2011 году Python освоил и мобильные платформы в плане разработки приложений под iOS и Android, а в 2015 с помощью библиотеки KivyMD [2] Python научился использовать Material Design.

Библиотека KivyMD — это коллекция виджетов в стиле Material Design, для использования их в кроссплатформенном фреймворке Kivy. В своей предыдущей статье KivyMD — жизнь продолжается [3], которая была выпущена год назад, я уже рассказывал о форке этой библиотеки, но в issues и в почту часто получал уведомления о том, что заявленые в форке возможности отсутствуют при установке KivyMD из PyPi. И это было действительно так, потому что в PyPi находилась старая версия библиотеки четырехлетней давности из репозитория на GitLab, которая уже не поддерживается автором и, поскольку мы не хотели использовать для своего форка новое имя, типа KivyMD-fork и загружать пакет в PyPi с таким названием, было решено написать автору KivyMD Andrés Rodríguez (@mixedCase_) и попросить его удалить свой пакет. После не долгих переговоров Андре дал нам инвайт в Python Package при условии, что он останется соавтором библиотеки. Так что теперь официальный репозиторий библиотеки находится здесь [2], а в PyPi доступны самые свежие наши обновления.

Итак, какие изменения в библиотеке произошли спустя год? Благодаря тем людям, которые используют KivyMD в своих проектах, мы устранили довольно много ошибок. Сейчас в репозитории 81 закрытый вопрос. Это если не учитывать того, что львиная доля вопросов решается в Discord онлайн чате [4] поддержки пользователей. В нем существует как русскоязычный так и англоязычный разделы. На данный момент реализованы не все спецификации Material Design, потому что над библиотекой работают практически два человека в свободное от работы время. То, что уже реализовано и то, что хотелось бы реализовать можно посмотреть в этом списке [5]. Он далеко не полный, но вы можете его дополнить, так как доступ на редактирование открыт для всех. Вот несколько новых виджетов:

Tooltip

Material Design Tooltip [6]

пример кода

from kivy.lang import Builder
from kivy.factory import Factory

from kivymd.app import MDApp

Builder.load_string('''
#:import random random
#:import hex_colormap kivy.utils.hex_colormap
#:import get_color_from_hex kivy.utils.get_color_from_hex
#:import md_icons kivymd.icon_definitions.md_icons

#:set ICONS list(md_icons.keys())


<IconButtonTooltips@MDIconButton+MDTooltip>


<ExampleTooltips@BoxLayout>
    orientation: 'vertical'

    MDToolbar:
        title: "Example Tooltips"
        md_bg_color: get_color_from_hex(hex_colormap["crimson"])
        elevation: 10
        left_action_items: [['dots-vertical', lambda x: None]]
        tooltip_text: "MDToolbar"

    Screen:

        BoxLayout:
            size_hint: None, None
            size: self.minimum_size
            padding: "10dp"
            spacing: "10dp"
            pos_hint: {'center_x': .5, "center_y": .9}

            IconButtonTooltips:
                icon: random.choice(ICONS)
                tooltip_text: "MDIconButton"
            IconButtonTooltips:
                icon: random.choice(ICONS)
                tooltip_text: "MDIconButton"
            IconButtonTooltips:
                icon: random.choice(ICONS)
                tooltip_text: "MDIconButton"
            IconButtonTooltips:
                icon: random.choice(ICONS)
                tooltip_text: "MDIconButton"
            IconButtonTooltips:
                icon: random.choice(ICONS)
                tooltip_text: "MDIconButton"
            IconButtonTooltips:
                icon: random.choice(ICONS)
                tooltip_text: "MDIconButton"
''')


class Test(MDApp):
    def build(self):
        return Factory.ExampleTooltips()


Test().run()

Python в Mobile development - 2

* пример работы на Mac OS

Python в Mobile development - 3

Bottom App Bar

Material Design Bottom App Bar [7]

Python в Mobile development - 4
Python в Mobile development - 5

Слева — пример работы Bottom App Bar из демо приложения Flutter, справа — демонстрация Bottom App Bar библиотеки KivyMD.

пример кода

from kivy.factory import Factory

from kivymd.app import MDApp
from kivy.lang import Builder


Builder.load_string(
    """
<BottomAppBar@Screen>

    BoxLayout:
        spacing: dp(10)
        orientation: 'vertical'

        MDToolbar:
            title: "Title"
            md_bg_color: app.theme_cls.primary_color
            left_action_items: [['menu', lambda x: x]]

        Widget:

        MDBottomAppBar

            MDToolbar:
                title: "Title"
                icon: "git"
                type: "bottom"
                left_action_items: [["menu", lambda x: x]]
"""
)


class BottomAppBarTest(MDApp):

    def build(self):
        return Factory.BottomAppBar()


BottomAppBarTest().run()

Backdropr

Material Design Backdropr [8]

Python в Mobile development - 6
Python в Mobile development - 7

Слева — пример работы Backdropr из демо приложения Flutter, справа — демонстрация Backdropr библиотеки KivyMD.

Также мы добавили в библиотеке раздел Studies в котором будем размещать демонстрационные приложения, такие как Shrine, Basil и другие. Пока можно посмотреть, как выглядит приложение Shrine:

А вот тоже самое, но из приложения на Flutter:

Так KivyMD выглядит на Android устройствах. В некоторых местах есть, конечно, проблемы с производительностью, но это касается, скорее самого Kivy. Например, все еще есть проблемы со стартом «тяжелых» библиотек. На нижеследующем видео я привел пример приложения использующего OpenCV в качестве бекенда к Android камере:

В конкретно этом случае уже ничего поделать нельзя, потому что при старте подгружаются не только OpenCV и NumPy, но еще и происходят нативные вызовы для того, чтобы все это связать. Однако грамотно спроектированное мобильное приложение на Kivy и KivyMD стартует довольно быстро. Все это касается мобильных платформ. На десктопе таких проблем нет и KivyMD выглядит там просто шикарно:

Mac OS:

Windows:

В принципе, не имеет значения на какой OS все это будет работать, потому что KivyMD, как и Kivy везде выглядит одинаково. Вы сами должны решать, какой вид будет у вашего приложения и я считаю, что это только плюс.

У нас очень много планов, но рук не хватает. Например, пока нет времени доработать файловый менеджер для десктопных систем, хотелось бы внедрить поддержку iOS виджетов и многое другое… Однако несмотря на все недостатки, количество скачиваний и интерес к библиотеке растет с каждым днем:

Python в Mobile development - 8

Присоединяйтесь к сообществу, если вы любите Python также, как любим его мы!

Канал на Youtube [9]
Новости KivyMD [10]
Discord чат [11]

Автор: HeaTTheatR

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka-pod-ios/339144

Ссылки в тексте:

[1] Kivy: https://github.com/kivy/kivy

[2] KivyMD: https://github.com/HeaTTheatR/KivyMD

[3] KivyMD — жизнь продолжается: https://habr.com/ru/post/422721/

[4] онлайн чате: https://discord.gg/aTkt235

[5] в этом списке: https://github.com/HeaTTheatR/KivyMD/issues/139

[6] Material Design Tooltip: https://material.io/components/tooltips

[7] Material Design Bottom App Bar: https://material.io/components/app-bars-bottom

[8] Material Design Backdropr: https://material.io/components/backdrop

[9] Канал на Youtube: https://www.youtube.com/c/KivyMD

[10] Новости KivyMD: https://twitter.com/KivyMD

[11] Discord чат: https://discord.gg/wu3qBST

[12] Источник: https://habr.com/ru/post/479126/?utm_campaign=479126&utm_source=habrahabr&utm_medium=rss