¿Por qué el evento on_touch_down de KivyMD está activando múltiples elementos?
Tengo una pantalla en mi aplicación KivyMD con una lista de elementos. Mi objetivo es navegar a diferentes pantallas dependiendo del elemento seleccionado. Me di cuenta de que no importa qué elemento elija, la siguiente pantalla estaría o no relacionada con el elemento seleccionado. Parece aleatorio.
A continuación se muestra un ejemplo reproducible. Para simplificar, eliminé la mayoría de los elementos y reemplacé la navegación con una función de impresión simple.
Cuando hago clic en un elemento o en el botón “cancelar”, se imprimen varios textos como si hubiera hecho clic en más de 1 elemento de la pantalla (por ejemplo, hacer clic en el elemento 1 da como resultado la impresión de “elemento3 elemento2 elemento1”). Sospecho que es por eso que la navegación no era consistente.
Encuentro esto confuso. ¿Alguien podría explicarme qué está pasando aquí? Gracias 🙂
from kivy.lang import Builder
from kivymd.app import MDApp
KV = '''
MDScreen:
name: "screen1"
MDBoxLayout:
orientation: "vertical"
MDToolbar:
id: tb_screen1
title: "Seleccionar ítem"
on_touch_down:
app.p(self.title)
ScrollView:
MDList:
OneLineListItem:
text: "item1"
on_touch_down:
app.p(self.text)
OneLineListItem:
text: "item2"
on_touch_down:
app.p(self.text)
OneLineListItem:
text: "item3"
on_touch_down:
app.p(self.text)
MDBoxLayout:
MDFloatLayout:
MDRectangleFlatIconButton:
text: "Cancelar"
on_press:
app.p(self.text)
'''
class MainApp(MDApp):
def build(self):
return Builder.load_string(KV)
def p(self,text):
print(text)
MainApp().run()
davy.ai
El problema con el código es que el evento
on_touch_down
se activa tanto para elOneLineListItem
como para elMDToolbar
, lo cual provoca que se impriman textos múltiples. Para solucionarlo, puedes cambiar el evento aon_release
para elOneLineListItem
y quitar el evento delMDToolbar
.Código actualizado:
En este código actualizado, el evento
on_release
solo se activará cuando se suelte elOneLineListItem
, lo cual debería solucionar el problema de imprimir textos múltiples.