Kivy Ошибка обновления значений счетчика на основе другого выбора счетчика (навигация по каталогу файлов) - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время я создаю приложение, которое создает некоторое «мультимедиа», которое затем отправляется в каталог файлов. На экране представления у меня есть 4 счетчика друг над другом (проект, уровень, комната, категория), что я пытаюсь достичь, это сказать, когда счетчик project установлен на «проект 1», то level значения счетчика автоматически заполняются для всех файлов в папке проекта 1. затем, как только счетчик уровня выбран, значения счетчика помещения заполняются самостоятельно и т. д.

вот как я сейчас это делаю:

.py file

def update_project_spinner(self):
    folderContents = os.listdir(DataBasePath)
    values = folderContents[1:]
    values.sort()
    return values

def update_level_spinner(self, value):
    folderLocation = DataBasePath + '/' + self.ids.project_spinner_id.text
    folderContents = os.listdir(folderLocation)
    values = folderContents[1:]
    values.sort()
    print(values)
    return values

.kv file

Spinner:
        text: "Project"
        size_hint_x: 1
        size_hint_y: 0.5
        values: root.update_project_spinner()
        id: project_spinner_id
        on_text:
            root.project_spinner_clicked(project_spinner_id.text)
            root.update_level_spinner()
    GridLayout:
        size_hint_x: 1
        size_hint_y: 0.5
        cols: 2
        Spinner:
            text: "Level"
            size_hint_x: 1
            size_hint_y: 1
            values: root.update_level_spinner()
            id: level_spinner_id
            on_text: root.level_spinner_clicked(level_spinner_id.text)
                     root.update_room_spinner()
        Spinner:
            text: "Room"
            size_hint_x: 1
            size_hint_y: 1
            values: root.update_room_spinner()
            id: room_spinner_id
            on_text: root.room_spinner_clicked(room_spinner_id.text)
                     root.update_category_spinner()

    Spinner:
        text: "Category"
        size_hint_x: 1
        size_hint_y: 0.5
        values: root.update_category_spinner()
        id: category_spinner_id
        on_text: root.category_spinner_clicked(category_spinner_id.text)

Спиннер проектов работает нормально, так как его значение задано при сборке, остальные его спиннеры, которые нужно обновить, у меня возникли проблемы. Кажется, у меня нет проблем с изменением данных в значениях, но они не обновляются на gui, но id действительно благодарен за некоторую помощь.

1 Ответ

0 голосов
/ 28 апреля 2020

На самом деле вы ничего не делаете для обновления gui. Попробуйте добавить:

    self.ids.level_spinner_id.values = values

в конец метода update_level_spinner.

Другой способ - создать ListProperty уровней в содержащем классе и использовать его в kv as:

values: root.levels

Тогда метод update_level_spinner может просто обновить ListProperty как:

self.levels = values

в конце метода update_level_spinner.

...