Приветствую!
Не так давно уже писали о 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
MDCardSwipe:
<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 уже доступна. На этом пока все, спасибо за внимание!
embden
Шикарная библиотека, недавно открыл для себя kivy. После того, как Qt Project стал грозиться закрыть исходники, решил найти альтернативу графическому тулкиту на Linux. GTK+ оказался слишком сложен — у меня не получилось даже запустить 'Hello world'. Зато с киви всё запустилось с минимальными трудностями. Очень порадовал их язык разметки kv — похож на qml и не так многословен как xml-based в gtk+.
KivyMD Автор
Рад, что вам понравилось.
embden
У меня вопрос есть — я вот хочу сделать на kivy окружение рабочего стола (как kde, gnome) для сенсорных дисплеев. Это возможно? Будут ли тормоза?
KivyMD Автор
Kivy — написан на чистом Python большей частью. Понятно, что вся диспечеризация, properties и прочее реализовано средствами Си расширений, но все же… Насколько я знаю, никто не реализовал подобное на Python.
embden
Пока что есть такое: http://www.qtile.org/, но я к своему стыду ещё его не попробовал.
Ещё есть https://github.com/jakogut/kivywm.