Как стать автором
Обновить

Python GUI. Библиотека KivyMD. Шаблон MVC, parallax эффект и анимация контента слайдов

Время на прочтение23 мин
Количество просмотров21K
Всего голосов 6: ↑6 и ↓0+6
Комментарии17

Комментарии 17

KivyMD это, я так понимаю, про мобильную разработку, а не про настольные проложения?

Это кроссплатформа. Material Design применим не только к мобильным приложениям.

Спасибо, вас понял. А есть ли в Kivy и в KivyMD, в частности, компоненты навроде DataGrid или TreeViewDataGrid ?

Когда я год назад смотрел kivymd, он жутко тормозил на телефоне и очень отдаленно реализовывал material design. Например, везде, где должно быть плавное переключение при перетаскивании (скрытие шапки, выдвигание боковой панели, листание табов), оно просто реагировало на завершение жеста, анимации дергались и т.п.

Как сейчас с этим?

К сожалению, я не совсем понимаю, что такое "скрытие шапки". Также не совсем ясно, что значит "очень отдаленно реализовывал Material Design". Каких-то дерганий я, например, не вижу на нижеследующих анимациях:

MDTabs

NavigationDrawer

Да, есть проблемы с производительностью на слабых мобильных девайсах. Но последние тесты, которые я проводил неделю назад на Android RedMi Note 10, показали скорость выполнения приложения близкую к нативным аналогам. О десктоп я не буду говорить, так как там проблем с производительностью нет и я считаю, что на данный момент это лучшее решения для современного GUI Python приложений. Так что если брать во внимание предстоящий выход Python 3.10, в котором обещают значительно увеличить производительность, а также то, что слабых девайсов становится с каждым днем все меньше, такие проблемы я считаю не критичными.

Ну, и да, год назад проблем было больше. Но у KivyMD не так много свободных разработчиков, времени и средств на реализацию такого качества, как, скажем, у Flutter. Но уже сейчас KivyMD стоит отнюдь не на последнем месте в списке кроссплатформенных фреймворков.

Вы показываете реакцию на мышку. А я говорю про события перемещения пальцем. Например, вот есть тулбар. Он может быть свернутым (одна строка текста наверху) или развернутым (текст крупнее, может быть ещё картинка на фоне). Переход из одного состояния в другой происходит плавно при движении пальцем контента (прокрутки экрана). Точно так же боковое меню выдвигается пальцем плавно, можно в любом момент палец задержать или вернуть назад. Так же интерактивно происходит листание табов уже в процессе перемещения пальца, а не в конце жеста. В частности это видно тут: https://material.io/design/interaction/gestures.html#properties или на нативных приложениях под Android.

Лаги я видел именно при запуске на телефоне, на гифках, снятых с компа естественно их не увидеть.

Движение мышки на компьютере + зажатая кнопка мыши аналагично свайпу на мобильном девайсе:

Ну и класс MDTabs предоставляет свойства для настройки type/duration анимации.

Старт приложения на мобильном:

Я не вижу каких-то лагов при загрузке демонстрационного приложения. Но и девайс не слабый - RedMi Note 10.

Спасибо. Тоже поставил себе демку на s21, действительно всё стало намного лучше чем я видел год назад. Остались кое-какие косяки (кнопка назад закрывает всё приложение, иногда отступы сползают, чекбоксы не реагируют на клик по связанному лейблу), но действительно и на палец реагирует интерактивно и рипл-эффект похож на настоящий. Хорошо, что фреймворк развивается, может быть скоро можно будет с комфортом писать под android на Python.

Кнопка назад закрывает всё приложение

Просто в демке не обрабатывается это событие. Да и демка очень старая (8 месяцев назад последняя сборка была). Автоматическая сборка на Git сломалась давненько так. А вместе с ней и APK уже отнюдь не с последней версией библиотеки.

Чекбоксы не реагируют на клик по связанному лейблу

В демке нет таких виджетов с чекбоксом и связанным лейболм. Для этих целей нужно использовать другой виджет.

Может быть скоро можно будет с комфортом писать под android на Python

Все к этому идет. Особенно после релиза инструмента https://github.com/kivymd/KivyMDBuilder

Сколько весить такое мобильное приложение, тащит ли он какой-то python runtime ещё?

А десктопное приложение прямо в .exe скомпилированное и упакованное с python сколько занимает?

В предыдущей вашей статье сравнения flutter и KivyMD я бы хотел видеть размеры устанавливаемого приложения на одном фреймвроке и на другом (к сожалению к той статье комментарии уже закрыты).

Минимальный размер APK или AAB занимает 8-10 МБ. Ну а дальше все от размеров ресурсов вашей программы зависит. Да, весь рантайм пакуется в пакет. Десктопные пакеты весят от 60 МБ. Но собранные в установщик (уже после PyInstaller) размер уменьшается вдвое. Например, приложение, которое при распаковке весит 120 МБ, в exe, который собран с помощью, например, InnoSetup, весит 30МБ.

Как у Kivy/KivyMD обстоят дела с accessibility? В первую очередь интересует возможность использования программ чтецов экрана, как для мобильных приложений, так и для десктопа. Последний раз я смотрел документацию и это было в TODO.

Kivy - это Python. Поэтому все, что доступно в Python, доступно и в Kivy. А что недоступно на мобильных устройствах их коробки или с помощью Python, доступно с помощью нативных API, которые также можно использовать.

Хорошая "отмазка", типа идите и используйте нативный API, если вам какого-то функционала не хватает. Но в случае c flutter мы имеем целую главу в документации https://flutter.dev/docs/development/accessibility-and-localization

Причем тут отмазки? О локализации в Python уже все написано. Не понимаю зачем делать на этом акцент? Или локализация во Флаттер это что-то из ряда вон? С accessibility - тоже самое. Kivy - это Python. Вам доступен весь спектр его библиотек в вашем приложении. Что тут еще можно добавить?

В нормальном гуёвом приложении, а не том, что отрисовывает свои виджеты в OpenGL, чтецу экрана есть, к чему прицепиться: подчинённость окон, контрол в фокусе, если он туда попал, то читаем только этот контрол и не надо слепошарому всё окно перечитывать, кнопочка по умолчанию, произнесём 1 раз, а дальше, если слепошарегу надо, он нажмёт хотки и прослушает.

Подобная проблема существует в текст-модовом клиенте, например, где  принципиально невозможно accessibility, потому что для чтеца экрана окно консольного клиента - одно окно с одним контролом, одним классом, одним хендлом, всё, что внутри этого окна с одним контролом, одним классом, одним хендлом - текст одного окна и не более. В силу этого слепошарег может нормально пользоваться только консольными приложениями с построчным выводом, аля ls и подобное.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации