知りたいこと
this リンクで(少し)説明されていますが、初心者の観点からは説明されていません。
私は2つのファイルを持っています
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()
days_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"
さて、私自身が答えを見つけたようです。それを共有したいと思います。
まず、dates_test.kvファイルに「id」を指定しましょう。 pythonコードまたは.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
stuff_p、stuff_b、stuff_cとは何か疑問に思うかもしれません???
それらは、独自のクラスで定義されたObjectPropertyです。 pythonコードのstuff_bで行った変更は、kivyファイルでリンクしたようにlabel_bで変更を加えます。
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の場合
Id:button_b(Get_Boysクラス)のボタンがリリースされた場合、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!"
ここで何が起こったのか見てみましょう...
self.parent.ids.gg.stuff_c.text = "男の子は女の子を変えました!"
および.kvファイル内
<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クラス)のButtonがリリースされた場合、id:label_b(Get_Boysクラス)のラベルを変更する必要があります。
get_Peopleクラス(test.py)でメソッドを定義します。
def rooted(self):
self.ids.gb.stuff_b.text = "people changed boys!"
および.kvファイル内
Button:
id: root_btn
text: "I am Root"
on_release: root.rooted()