How to access id/widget of different class from a kivy file (.kv)?

后端 未结 1 1196
孤城傲影
孤城傲影 2020-11-30 03:22

What I want to know?

  1. If button with id: button_b (Get_Boys class) is released, then Label with id: label_g (Get_Girls class) must change.
相关标签:
1条回答
  • 2020-11-30 04:00

    Well!, looks like I myself found the answer and I would like to share it.

    First of all let us give "id" in dates_test.kv file. So that you can access them in python code or in .kv file.

    <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
    

    you might wonder what is stuff_p,stuff_b and stuff_c???

    They are ObjectProperty defined in their own classes. The changes you make in stuff_b in your python code makes changes in label_b as you have linked in kivy file.

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

    For Part 1 and Part 2

    1. If button with id: button_b (Get_Boys class) is released, then Label with id: label_g (Get_Girls class) must change.

    2. If Button with id: button_b (Get_Boys class) is pressed, then Label with id: root_lbl (Get_People class) must change.

    In the Get_Boys class (test.py) define these methods.

    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!"
    

    let's see what happened here...

    self.parent.ids.gg.stuff_c.text = "Boys changed Girls!"

    1. self.parent refers to Get_Parent class.
    2. .ids.gg refers to the id that we created above for Get_Girls.
    3. .stuff_c is used to refer label_g (above) in Get_Girls class.
    4. .text is used to change the text in the label.

    and in the .kv file

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

    For Part 3

    1. If Button with id: root_btn (Get_People class) is released, then Label with id: label_b (Get_Boys class) must change.

    in the Get_People class (test.py) define a method.

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

    and in .kv file

    Button:
        id: root_btn
        text: "I am Root"
        on_release: root.rooted()
    
    0 讨论(0)
提交回复
热议问题