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 doble toque

Estoy haciendo una aplicación en Python kivy, y tengo una imagen arrastrable. Cada vez que un usuario toca dos veces en la imagen arrastrable, se imprime “esto es un doble toque”.

main.py

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.clock import Clock
from functools import partial
from kivy.lang import Builder
from kivy.uix.behaviors import DragBehavior
from kivy.uix.image import Image


class DragImage(DragBehavior, Image):
    def on_touch_up(self, touch):
        uid = self._get_uid()
        if uid in touch.ud:
            return super(DragImage, self).on_touch_up(touch)

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos) and touch.is_double_tap:
            print('esto es un doble toque')
        return super(DragImage, self).on_touch_down(touch)


class TacScreen(Screen):
    pass


class MainApp(App):
    def build(self):
        return Builder.load_string(kv)


MainApp().run()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear una imagen arrastrable en tu aplicación Python Kivy y imprimir “this is a double tap” cada vez que el usuario hace doble clic en ella, puedes seguir estos pasos:

    1. Importa los módulos necesarios:
    from kivy.app import App
    from kivy.uix.screenmanager import Screen
    from kivy.clock import Clock
    from functools import partial
    from kivy.lang import Builder
    from kivy.uix.behaviors import DragBehavior
    from kivy.uix.image import Image
    
    1. Define una clase personalizada que herede tanto de DragBehavior como de Image:
    class DragImage(DragBehavior, Image):
    
    1. Sobrescribe el método on_touch_down de la clase Image para detectar los doble clics en la imagen:
    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos) and touch.is_double_tap:
            print('this is a double tap')
        return super(DragImage, self).on_touch_down(touch)
    
    1. Utiliza la clase DragImage en la interfaz gráfica de tu aplicación:
    class TacScreen(Screen):
        pass
    
    kv = '''
    <tacscreen>:
        DragImage:
            source: 'image.png'
            size_hint: None, None
            size: 300, 300
            pos_hint: {'center_x': 0.5, 'center_y': 0.5}
    '''
    
    class MainApp(App):
        def build(self):
            return Builder.load_string(kv)
    
    MainApp().run()
    

    En este ejemplo, estamos utilizando el lenguaje kv para definir nuestra interfaz gráfica, que incluye una clase TacScreen y un widget DragImage que muestra una imagen y permite al usuario arrastrarla por la pantalla. Cada vez que el usuario hace doble clic en la imagen, se llama al método on_touch_down de la clase DragImage, que imprime “this is a double tap” en la consola.

Comments are closed.