Как получить доступ к id / widget другого класса из файла kivy (.кв)?
что я хочу знать?
- если кнопка с id: button_b (Get_Boys class) выпущена, то метка с id: label_g (Get_Girls class) должна измениться.
- если нажата кнопка с id: button_b (класс Get_Boys), то метка с id: root_lbl (класс Get_People) должна измениться.
- если кнопка с id: root_btn (Get_People class) выпущена, то метка с id: label_b (Get_Boys class) должна измениться.
Это объяснил (мало) в этой ссылка, но не с точки зрения новичка.
у меня есть 2 файлы
- test.py
- dates_test.кв
test.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()
dates_test.файл кв
<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"
1 ответов
хорошо!, похоже, я сам нашел ответ, и я хотел бы поделиться им.
прежде всего давайте дадим " id " в dates_test.файл кв. Чтобы вы могли получить к ним доступ в коде python или in .файл кв.
<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
вы можете спросить, Что такое stuff_p, stuff_b и stuff_c???
они ObjectProperty определены в их собственных классах. Изменения, внесенные в stuff_b в коде python, вносят изменения в label_b, как вы связали в 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)
...
для части 1 и части 2
if button with id: button_b (Get_Boys class) выпущен, затем метка с id: label_g (класс Get_Girls) должен измениться.
если нажата кнопка с id: button_b (класс Get_Boys), то метка с id: root_lbl (класс Get_People) должен измениться.
в классе Get_Boys (test.py) определите эти методы.
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!"
давайте посмотрим, что здесь произошло...
себя.родитель.ids.gg.stuff_c.текст = " мальчики изменили девочек!"
- self.родитель ссылается на класс Get_Parent.
- .ids.gg ссылается на идентификатор, который мы создали выше для Get_Girls.
- .stuff_c используется для ссылки на label_g (выше) в классе Get_Girls.
- .текст используется для изменения текста в метке.
и в самом .киловольт файл
<Get_Boys>:
stuff_b: label_b
Button:
id: button_b
text: "button 1"
on_release: root.change_girl()
on_press: root. change_people()
Часть 3
- если кнопка с id: root_btn (Get_People class) выпущена, то метка с id: label_b (класс Get_Boys) должен измениться.
в классе Get_People (test.py) определите метод.
def rooted(self):
self.ids.gb.stuff_b.text = "people changed boys!"
и в .файл кв
Button:
id: root_btn
text: "I am Root"
on_release: root.rooted()