https://habr.com/ru/post/500968/- Python
- Разработка мобильных приложений
Приветствую!
Не так давно уже писали о
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 уже доступна. На этом пока все, спасибо за внимание!