Как я могу сбросить состояние ToggleButton перед выходом на экран? - PullRequest
0 голосов
/ 16 марта 2020

У меня есть много кнопок ToggleButton на экране B, и я жду, чтобы сбросить их все перед входом на экран.

class screenB(Screen):
    def __init__(self, **kwargs):
        super(MorePage, self).__init__(**kwargs)
        Clock.schedule_once(self.AddWidget)

    def AddWidget(self, *args):
        for i in range(len(all_brand)):
            brand_name = all_brand[i]
            if brand_name[0] == "A" or brand_name[0] == "a":
                self.tbutton = MyToggle(id=brand_name, text=brand_name)
                self.ids.Axxx.add_widget(self.tbutton)
                print(self.tbutton.id)
            elif brand_name[0] == "B" or brand_name[0] == "b":
                self.tbutton = MyToggle(id=brand_name, text=brand_name)
                self.ids.Bxxx.add_widget(self.tbutton)
            elif brand_name[0] == "C" or brand_name[0] == "c":
                self.tbutton = MyToggle(id=brand_name, text=brand_name)
                self.ids.Cxxx.add_widget(self.tbutton)
            ....

    def reset_state(self):
        print(self.ids)
        print(self.ids.Axxx.ids)
        for i in all_brand:    # all brand includes all ids of ToggleButton added in AddWidget
            self.ids[i].state = "normal"

в файле .kv,

<screenB>:
    on_pre_enter:
        root.reset_state()
    Label:
        id: aaa
    Label: 
        id:bbb
    StackLayout:
        id: Axxx
    StackLayout:
        id: Bxxx
    StackLayout:
        id: Cxxx
    ...

Я пытался позвонить reset_state перед входом в screenB. Затем я обнаружил, что self.ids дал мне только aaa, bbb, Axxx, Bxxx, Cxxx, но ничего не добавлено в AddWidget. И self.ids.Axxx.ids дал мне пустой дикт. Но если я печатаю tbutton.id сразу после добавления ToggleButton, я получаю текущее возвращение.

Как мне тогда сбросить состояние всех ToggleButton? Спасибо большое !!

1 Ответ

0 голосов
/ 18 марта 2020

Я думаю, что теперь вижу, self.Axxx.ids ничего не возвращает, потому что у вас нет детей с id s в этом виджете, просто сделайте это вместо

for child in self.ids.Axxx.children:
    child.state = "normal"

Это должно сделать

...