es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python kivy arrastrando límites.

Estoy haciendo una aplicación en python kivy, y tengo un problema. Estoy arrastrando una imagen y aunque mantenga presionado fuera de la imagen, todavía se arrastra. Quiero que la imagen se arrastre solo si estoy manteniendo presionado sobre la imagen. Intenté solucionar el problema pero no encontré ninguna solución. ¡A continuación está mi código! ¡Cualquier ayuda es apreciada! ¡Gracias!

Este es mi archivo .kv

<DragImage>:
    drag_rectangle: self.x+self.width/3, self.y+self.height/3, self.width/3, self.height/3
    drag_timeout: 10000000
    drag_distance: 0

<MainScreen>:
    #:import utils kivy.utils
    #:import FadeTransition kivy.uix.screenmanager.FadeTransition

    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: "Background.png"

    DragImage:
        id: book
        pos: 0, 102
        size_hint: 1, .1
        source: "Tv.png"

Este es mi main.py

class DragImage(DragBehavior, Image):
    def on_touch_up(self, touch):
        uid = self._get_uid()
        if uid in touch.ud:
            print(self.source, 'soltado en', touch.x, touch.y)
        return super(DragImage, self).on_touch_up(touch)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para hacer que la imagen se pueda arrastrar solo cuando se toque, puedes modificar el método on_touch_down de la clase DragImage en tu archivo main.py de la siguiente manera:

    class DragImage(DragBehavior, Image):
        def on_touch_down(self, touch):
            if self.collide_point(*touch.pos):
                return super(DragImage, self).on_touch_down(touch)
    

    Esto verifica si el evento de toque está dentro de los límites de la imagen (método collide_point) antes de llamar al método padre on_touch_down, que inicia el comportamiento de arrastre. Si el toque está fuera de la imagen, on_touch_down devolverá False, ignorando eficazmente el evento de toque.

    ¡Espero que eso ayude!

Comments are closed.