Материальный Python. Что нового в библиотеке KivyMD

—

от автора

Приветствую!

Не так давно уже писали о Python в Mobile development и разработке мобильных приложений на Python с помощью библиотек Kivy и KivyMD. Эта статья продолжит знакомить вас с кроссплатформенными Python инструментами, а конкретно сегодня мы рассмотрим новинки, которые появились в библиотеке KivyMD за последнее время.

KivyMD — это дополнение к фреймворку Kivy (кроссплатформенный инструмент, ориентированный на разработку современных приложений с поддержкой multitouch), которое предоставляет пользователю набор виджетов «от Google». В кавычках потому, что под капотом KivyMD использует Kivy, который в свою очередь дергает SDL2 и OpenGL ES 2.0 для рендеринга UI, то есть, как и во Flutter, существует свой собственный движок для рендеринга виджетов, а значит все, что вы видите на экране — это не натив. Исключения и споры касательно этого мы решительно оставим в стороне и приступим.

MDDataTable

Итак, в KivyMD последней версии (0.104.1) мы наконец-то внедрили виджет DataTable:

Реализация использования довольно простая:

from kivy.metrics import dp  from kivymd.app import MDApp from kivymd.uix.datatables import MDDataTable  class Example(MDApp):     def build(self):         data_tables = MDDataTable(             size_hint=(0.9, 0.6),             use_pagination=True,  # use page pagination for table             check=True,  # use checkboxes for rows             # Data for header columns (name column, width column).             column_data=[                 ("Desert (100g serving)", dp(70)),                 ("Calories", dp(30)),                 ("Fat (g)", dp(30)),                 ("Carbs (g)", dp(30)),                 ("Protein (g)", dp(30)),                 ("Sodium (mg)", dp(30)),                 ("Calcium (%)", dp(30)),                 ("Iron (%)", dp(30)),             ],             # Data for rows.             row_data=[                 ("Frozen yogurt", "159", "6.0", "24", "4.0", "87", "14%", "1%"),                 # ...,                 # ...,             ],         )         data_tables.open()   Example().run() 

В DataTable пока реализованы не все функции из Material Design spec DataTables, но мы работаем над улучшениями.

MDDialogs

Было упрощено и улучшено использование диалоговых окон — теперь они соответствуют спецификации материального дизайна.

        dialog = MDDialog(             title="Reset settings?",             text="This will reset your device to its default factory settings.",             buttons=[                 MDFlatButton(                     text="CANCEL", text_color=self.theme_cls.primary_color                 ),                 MDFlatButton(                     text="ACCEPT", text_color=self.theme_cls.primary_color                 ),             ],         )         dialog.open() 

MDCard

В MDCard были добавлены поведения focus_behavior и ripple_behavior:

focus_behavior:

MDCard:     focus_behavior: True 

ripple_behavior:

MDCard:     ripple_behavior: True </source <b>MDCardSwipe</b>:  <img src="https://habrastorage.org/webt/ot/kr/kx/otkrkx3dt1yyd2bvxnpmuauqsps.gif" align="center"/> <source lang="python"> <SwipeToDeleteItem>:     size_hint_y: None     height: content.height      MDCardSwipeLayerBox:      MDCardSwipeFrontBox:          OneLineListItem:             id: content             text: root.text             _no_ripple_effect: True 

class SwipeToDeleteItem(MDCardSwipe):     text = StringProperty() 

MDTextField

Добавлено текстовое поле с режимом fill:

MDTextField:     hint_text: "Fill mode"     mode: "fill"     fill_color: 0, 0, 0, .4 

Во всех классах текстовых полей присутствует возможность установить иконку справа:

MDMenu

Улучшена производительность класса MDMenu.

TapTargetView

Добавлен виджет TapTargetView:

MDFloatingActionButtonSpeedDial

Внедрили виджет MDFloatingActionButtonSpeedDial:

from kivy.uix.screenmanager import Screen  from kivymd.app import MDApp from kivymd.uix.button import MDFloatingActionButtonSpeedDial  class Example(MDApp):     data = {         'language-python': 'Python',         'language-php': 'PHP',         'language-cpp': 'C++',     }      def build(self):         screen = Screen()         speed_dial = MDFloatingActionButtonSpeedDial()         speed_dial.data = self.data         speed_dial.rotation_root_button = True         screen.add_widget(speed_dial)         return screen  Example().run() 

Hot reload

Фреймворк Flutter очень гордится своим инструментом Hot reload (перезагрузка свойств виджетов налету)… В Kivy это было уже давно реализовано. Мы лишь усовершенствовали данную утилиту и включили ее в пакет KivyMD:

И, да, официальная документация KivyMD уже доступна. На этом пока все, спасибо за внимание!

ссылка на оригинал статьи https://habr.com/ru/post/500968/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *