https://habr.com/ru/post/479126/- Python
- Разработка под iOS
- Разработка мобильных приложений
- Разработка под Android
Ни для кого не секрет, что область применения
Python довольно широка: начиная от web-технологий, игровой индустрии и заканчивая проектами
NASA. Python работает практически везде: от карманных компьютеров и смартфонов до серверов сети и практически на всех известных платформах, таких как
Windows, Linux/UNIX, macOS, Palm OS, Raspberry PI и так далее. Благодаря фреймворку
Kivy в 2011 году
Python освоил и мобильные платформы в плане разработки приложений под
iOS и
Android, а в 2015 с помощью библиотеки
KivyMD Python научился использовать
Material Design.
Библиотека
KivyMD — это коллекция виджетов в стиле
Material Design, для использования их в кроссплатформенном фреймворке
Kivy. В своей предыдущей статье
KivyMD — жизнь продолжается, которая была выпущена год назад, я уже рассказывал о форке этой библиотеки, но в
issues и в почту часто получал уведомления о том, что заявленые в форке возможности отсутствуют при установке
KivyMD из
PyPi. И это было действительно так, потому что в
PyPi находилась старая версия библиотеки четырехлетней давности из репозитория на
GitLab, которая уже не поддерживается автором и, поскольку мы не хотели использовать для своего форка новое имя, типа KivyMD-fork и загружать пакет в
PyPi с таким названием, было решено написать автору
KivyMD Andrés Rodríguez (@mixedCase_) и попросить его удалить свой пакет. После не долгих переговоров Андре дал нам инвайт в
Python Package при условии, что он останется соавтором библиотеки. Так что теперь официальный репозиторий библиотеки находится
здесь, а в
PyPi доступны самые свежие наши обновления.
Итак, какие изменения в библиотеке произошли спустя год? Благодаря тем людям, которые используют
KivyMD в своих проектах, мы устранили довольно много ошибок. Сейчас в репозитории 81 закрытый вопрос. Это если не учитывать того, что львиная доля вопросов решается в
Discord онлайн чате поддержки пользователей. В нем существует как русскоязычный так и англоязычный разделы. На данный момент реализованы не все спецификации
Material Design, потому что над библиотекой работают практически два человека в свободное от работы время. То, что уже реализовано и то, что хотелось бы реализовать можно посмотреть
в этом списке. Он далеко не полный, но вы можете его дополнить, так как доступ на редактирование открыт для всех. Вот несколько новых виджетов:
Tooltip
Material Design Tooltip
пример кода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()

* пример работы на Mac OS
Bottom App Bar
Material Design Bottom App Bar
Слева — пример работы
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
Слева — пример работы
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 также, как любим его мы!
Канал на Youtube
Новости KivyMD
Discord чат