【问题标题】:Kivy Issue updating spinner values based off other spinner selection (navigating file directory)Kivy 问题根据其他微调器选择更新微调器值(导航文件目录)
【发布时间】:2020-04-28 11:51:02
【问题描述】:

我目前正在构建一个应用程序,该应用程序创建一些“媒体”,然后将其提交到文件目录中。 在提交屏幕中,我有 4 个相互叠加的微调器(项目、关卡、房间、类别) 我想要实现的是,当 project 微调器设置为“项目 1”时,level 微调器值会自行填充到项目 1 文件夹中的所有文件中。然后一旦选择了关卡微调器,房间微调器的值就会自动填充等等。

这是我目前的做法:

.py 文件

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 文件

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 上更新,但我真的很感谢一些帮助。

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    您实际上并没有做任何事情来更新 gui。尝试添加:

        self.ids.level_spinner_id.values = values
    

    update_level_spinner 方法的末尾。

    另一种方法是在包含类中创建一个级别的ListProperty,并在kv 中使用它作为:

    values: root.levels
    

    那么update_level_spinner方法可以简单的更新ListPropertylike:

    self.levels = values
    

    update_level_spinner 方法的末尾。

    【讨论】:

    • 使用 ListProperty 我能够得到这个工作,并清理了很多代码。非常非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多