Kivy: Haga que los widgets de uix sean accesibles con "desde el botón de importación de kivy.uix ..."

Creado en 25 abr. 2016  ·  6Comentarios  ·  Fuente: kivy/kivy

Parece casi trivial, pero ¿sería posible hacer que algunos de los widgets / base más utilizados sean accesibles en el módulo kivy/uix/__init__.py ?

Esto significaría en lugar de tener que hacer lo siguiente:

from kivy.uix.button import Button
from kivy.uix.label import Label
...
from kivy.uix.scatter import Scatter

Solo necesitas hacer lo siguiente:

from kivy.uix import Label, Button, ... , Scatter

El motivo de esta solicitud es principalmente para ayudar a ordenar un poco las importaciones y significa que no es necesario escribir 30 líneas casi idénticas cuando se desea importar 30 widgets diferentes.

Por lo que puedo decir, solo necesitaría importar las clases deseadas en el módulo kivy/uix/__init__.py y ajustar la variable __all__ así:

# kivy/uix/__init__.py

from kivy.uix.button import Button
from kivy.uix.label import Label
...
from kivy.uix.scatter import Scatter

__all__ = ['Button', 'Label', ..., 'Scatter']

Comentario más útil

Vale la pena mencionar que Factory proporciona una importación fácil si la necesita;

from kivy.factory import Factory

lbl = Factory.Label(text="Hello World")

class MyScatter(Factory.Scatter):
    pass

Todos 6 comentarios

La sintaxis de importación sería buena, pero no se desea que todos los demás widgets estén presentes.

Duplicado de https://github.com/kivy/kivy/issues/3583.

Vale la pena mencionar que Factory proporciona una importación fácil si la necesita;

from kivy.factory import Factory

lbl = Factory.Label(text="Hello World")

class MyScatter(Factory.Scatter):
    pass

¿Quizás esa es la forma en que init podría funcionar? Importe en init Factory y para cada widget devuelva Factory.<widget> . ¿O es demasiado duro?

Probablemente sería posible utilizar un método de gancho de importación, aunque esto tiene la desventaja de posiblemente romper la detección de código de algunos IDE.

¿Es la razón por la que no se hace todo esto por completo? Si es así, sería posible (aunque un poco desordenado) tener un módulo kivy.uix.everything que proporcione todas las importaciones.

No es realmente rendimiento, solo hace que sea menos escribir. A veces me recuerda a Java (por ejemplo, escribir las mismas palabras varias veces). No se ve así si las palabras son cortas, pero cuando importa, por ejemplo, screenmanager, las importaciones pueden ser largas.

Me refiero a la razón _no_ para tener este tipo de importación: si todos los widgets son importados por __init__.py se impone una penalización menor de rendimiento cada vez que importa cualquier widget, ya que todos sus archivos están cargados. Sin embargo, esta penalización sería bastante pequeña, no sé si es importante (aunque en Android estas cosas pueden ser relevantes incluso si son insignificantes en el escritorio).

¿Fue útil esta página
0 / 5 - 0 calificaciones