Material Python. ¿Qué hay de nuevo en la biblioteca KivyMD?


¡Saludos!

No hace mucho tiempo, escribieron sobre Python en el desarrollo móvil y el desarrollo de aplicaciones móviles en Python utilizando las bibliotecas Kivy y KivyMD . Este artículo continuará familiarizándolo con las herramientas de Python multiplataforma, y ​​específicamente hoy veremos los nuevos elementos que han aparecido recientemente en la biblioteca KivyMD.

KivyMD es una adición al marco Kivy (una herramienta multiplataforma centrada en el desarrollo de aplicaciones modernas con soporte multitáctil), que proporciona al usuario un conjunto de widgets "de Google". Entre comillas, porque debajo del capó, KivyMD usa Kivy, que a su vez extrae SDL2 y OpenGL ES 2.0 para renderizar la interfaz de usuario, es decir, como en Flutter , hay su propio motor para renderizar widgets, lo que significa todo lo que ves en la pantalla - Esto no es nativo. Excepciones y disputas con respecto a esto, decididamente lo dejaremos de lado y procederemos.

MDDataTable


Entonces, en la última versión de KivyMD (0.104.1) finalmente implementamos el widget DataTable:


La implementación del uso es bastante simple:

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()

En DataTable, todavía no se implementan todas las funciones de DataTables de especificaciones de diseño de materiales , pero estamos trabajando en mejoras.

MDDialogs


El uso de cuadros de diálogo se ha simplificado y mejorado: ahora cumplen con las especificaciones de diseño de materiales.

        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


En MDCard se agregaron para realizar focus_behavior y ripple_behavior :

focus_behavior :

MDCard:
    focus_behavior: True



comportamiento_ ondulación :


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


Campo de texto agregado con modo de relleno :


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

En todas las clases de campos de texto existe la posibilidad de establecer el icono a la derecha:



MDMenu


Rendimiento mejorado de la clase MDMenu.

TapTargetView


Se agregó el widget TapTargetView:


MDFloatingActionButtonSpeedDial


Implementado el widget 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()


Recarga en caliente


El marco Flutter está muy orgulloso de su herramienta de recarga en caliente (recarga de propiedades de widgets sobre la marcha) ... En Kivy, esto se ha implementado durante mucho tiempo. Acabamos de mejorar esta utilidad y la incluimos en el paquete KivyMD:


Y sí, la documentación oficial de KivyMD ya está disponible. Eso es todo por ahora, ¡gracias por mirar!

All Articles