python events button widget kivy

python - ¿Cómo acceder a id/widget de clase diferente desde un archivo kivy(.kv)?



events button (1)

¡Bueno !, parece que yo mismo encontré la respuesta y me gustaría compartirla.

En primer lugar, demos "id" en el archivo date_test.kv. Para que pueda acceder a ellos en código python o en un archivo .kv.

<Get_People>: stuff_p: root_lbl ... Get_Boys: id: gb Get_Girls: id: gg <Get_Boys>: stuff_b: label_b <Get_Girls>: stuff_c: label_g

te preguntarás qué es stuff_p, stuff_b y stuff_c ???

Son ObjectProperty definidos en sus propias clases. Los cambios que realice en stuff_b en su código de Python hacen cambios en label_b como lo ha vinculado en el archivo kivy.

class Get_People(BoxLayout): stuff_p = ObjectProperty(None) ... class Get_Boys(BoxLayout): stuff_b = ObjectProperty(None) ... class Get_Girls(BoxLayout): stuff_c = ObjectProperty(None) ...

Para la Parte 1 y la Parte 2

  1. Si se libera el botón con id: button_b (clase Get_Boys), entonces la etiqueta con id: label_g (clase Get_Girls) debe cambiar.

  2. Si se presiona el botón con id: button_b (clase Get_Boys), entonces la etiqueta con id: root_lbl (clase Get_People) debe cambiar.

En la clase Get_Boys (test.py) defina estos métodos.

def change_girl(self): self.parent.ids.gg.stuff_c.text = "Boys changed Girls!" #self.stuff_b.text = "i changed myself!" def change_people(self): self.parent.ids.root_lbl.text = "Boys changed people!"

veamos que pasó aquí ...

self.parent.ids.gg.stuff_c.text = "¡Los niños cambiaron a las niñas!"

  1. self.parent se refiere a la clase Get_Parent.
  2. .ids.gg se refiere a la identificación que creamos anteriormente para Get_Girls.
  3. .stuff_c se usa para referir label_g (arriba) en la clase Get_Girls.
  4. .text se usa para cambiar el texto en la etiqueta.

y en el archivo .kv

<Get_Boys>: stuff_b: label_b Button: id: button_b text: "button 1" on_release: root.change_girl() on_press: root. change_people()

Para la parte 3

  1. Si se libera el botón con id: root_btn (clase Get_People), entonces la etiqueta con id: label_b (clase Get_Boys) debe cambiar.

en la clase Get_People (test.py) defina un método.

def rooted(self): self.ids.gb.stuff_b.text = "people changed boys!"

y en archivo .kv

Button: id: root_btn text: "I am Root" on_release: root.rooted()

¿Qué quiero saber?

  1. Si se libera el botón con id: button_b (clase Get_Boys), entonces la etiqueta con id: label_g (clase Get_Girls) debe cambiar.
  2. Si se presiona el botón con id: button_b (clase Get_Boys), entonces la etiqueta con id: root_lbl (clase Get_People) debe cambiar.
  3. Si se libera Button with id: root_btn (clase Get_People), entonces Label with id: label_b (clase Get_Boys) debe cambiar.

Se explica (poco) en this enlace, pero no desde el punto de vista del principiante.

Tengo 2 archivos

  1. prueba.py
  2. date_test.kv

prueba.py

class Get_People(BoxLayout): pass class Get_Boys(BoxLayout): pass class Get_Girls(BoxLayout): pass class TestApp(App): def build(self): self.load_kv(''dates_test.kv'') return Get_People()

archivo date_test.kv

<Get_People>: orientation: ''vertical'' Button: name: root_btn id: root_btn text: "I am Root Button" on_release: change_label_b Label: id: root_lbl text: "I am Root Label" Get_Boys: Get_Girls: <Get_Boys>: Button: id: button_b text: "Button for boys" on_press: change_label_root on_release: change_label_g Label: id: label_b text: "Label for boys" <Get_Girls>: Button: id: button_g text: "Button for girls" Label: id: label_g text:"Label for girls"