¿Cómo agregar un comportamiento de arrastre en el widget kivy?

En este artículo, desarrollaremos una ventana GUI utilizando el marco kivy de python, y agregaremos una etiqueta que tenga un comportamiento de arrastre en esta ventana.

Nota: También puede seguir el mismo patrón para implementar eventos de arrastre en otros widgets.

Acercarse:

En realidad, lo que estamos haciendo es simplemente usar el concepto de herencia, y estamos creando un nuevo widget (DraggableLabel) combinando las propiedades del widget Kivy Label y la clase DragBehaviour de Kivy. Y a partir del código, puedes comprobar que hemos definido tres propiedades 

  • drag_rectangle: es el área en la que queremos habilitar el arrastre, puede ver en el código que hemos usado nosotros mismos con los valores de esta propiedad porque queremos habilitar el arrastre en todo el diseño.
  • drag_timeout: especifica el tiempo tras el cual se desactivará el arrastre desde la Etiqueta si no se arrastra Etiqueta, pero volverá a entrar en juego si empezamos a arrastrar.
  • drag_distance: Distancia a mover antes de arrastrar el DragBehavior, en píxeles. Tan pronto como se haya recorrido la distancia, DragBehavior comenzará a arrastrarse y no se enviará ningún evento táctil a los niños.

Y después de definir las propiedades, simplemente estamos usando nuestro widget recién creado como usamos otros.

A continuación se muestra la implementación:

Python3

from kivy.app import App
from kivy.uix.label import Label
  
# importing builder from kivy
from kivy.lang import Builder
from kivy.uix.behaviors import DragBehavior
  
# using this class we will combine
# the drag behaviour to our label widget
class DraggableLabel(DragBehavior, Label):
    pass
  
# this is the main class which
# will render the whole application
class uiApp(App):
  
    # method which will render our application
    def build(self):
        return Builder.load_string("""
<DraggableLabel>:
    drag_rectangle: self.x, self.y, self.width, self.height
    drag_timeout: 10000
    drag_distance: 0
DraggableLabel:
    text:"[size=40]GeeksForGeeks[/size]"
    markup:True
                                   """)
  
# running the application
uiApp().run()

Producción:

Publicación traducida automáticamente

Artículo escrito por yashmathur123123 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *