Киви: Как я могу сбросить флажок активное значение - PullRequest
0 голосов
/ 04 июня 2019

Когда я переключаюсь между экранами, я хочу снять флажки, помеченные. Помеченные флажки остаются отмеченными при смене экранов.

Я думаю, что моя проблема будет решена, если я найду способ изменить активацию флажковкогда я переключаюсь на другой экран.

Но я не знаю, как это сделать.

Мой код также имеет определенное количество флажков, я выбираю только шесть из них.Функции в моем главном файле предназначены для их вычисления.

Мой main.py

class SkillChose(Screen):
    checkboxvalues = {}
    for i in range(1, 21):
        checkboxvalues["s{}".format(i)] = -2
    def __init__(self,**kwargs):
        super(SkillChose,self).__init__(**kwargs)
        self.click_count = 0
        self.skills=[]

    def click_plus(self,check,id):
        if check is True:
            self.click_count+=1
            self.checkboxvalues[id]=1
        return True
    def click_extraction(self,id):
        if self.checkboxvalues[id]==1:self.click_count-=1
        self.checkboxvalues[id]=0
        return False
    def control(self,id):
        if id==0:return False
        count=0
        for open in self.checkboxvalues.values():
            if open==1:
                count+=1
        for i,j in self.checkboxvalues.items():
            print(i,j)
        if count<6:
            return True
        else:
            return False


my.kv file

<SkillChose>:
    name:"skill"
    BoxLayout
        ScrollView:
            size: self.size
            GridLayout:
                id: grid
                size_hint_y: None
                row_default_height: '50sp'
                height: self.minimum_height
                cols:2
                Label:
                Label:
                Label:
                    text:"skill1"
                CheckBox:
                    value:"s1"
                    active:(root.click_plus(self.active,self.value) if root.control(self.value) else False ) if self.active else root.click_extraction(self.value)
                Label:
                    text:"skill2"
                CheckBox:
                    value:"s2"
                    active:(root.click_plus(self.active,self.value) if root.control(self.value) else False ) if self.active else root.click_extraction(self.value)
                Label:
                    text:"skill3"
                CheckBox:
                    value:"s3"
                    active:(root.click_plus(self.active,self.value) if root.control(self.value) else False ) if self.active else root.click_extraction(self.value)

1 Ответ

0 голосов
/ 04 июня 2019

Следующие улучшения (файл kv и скрипт Python) необходимы для очистки атрибута CheckBox active при выходе из экрана.

файл кв

Используйте событие ScreenManager on_leave для вызова обратного вызова, например, reset_checkbox()

Фрагменты - файл kv

<SkillChose>:
    name:"skill"

    on_leave: root.reset_checkbox()

    BoxLayout:
        ...

Py file

  • Добавить оператор импорта, from kivy.uix.checkbox import CheckBox
  • Используйте цикл for для обхода потомков GridLayout: через ids.grid
  • Используйте функцию isinstance(), чтобы проверить CheckBox виджет

Snippets - Py file

class SkillChose(Screen):
    ...
    def reset_checkbox(self):
        for child in reversed(self.ids.grid.children):
            if isinstance(child, CheckBox):
                child.active = False    
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...