【问题标题】:How to Make Kivy File Chooser auto refresh in python如何在 python 中使 Kivy 文件选择器自动刷新
【发布时间】:2020-05-28 16:21:41
【问题描述】:

所以我一直在编写这个文件浏览器程序。到目前为止,我已经编写了复制功能,我遇到的问题是,在我将文件复制到它的新目录(即我当前在文件选择器中的目录)之后,文件没有显示在实际中文件选择器。我正在使用图标视图,我在这里只看到一个在线提及:Refresh / Reload FileChooser 我尝试了这种方法,就像实际的 _update_files() 函数正在执行一样。(用几个打印语句检查它)但我是注意到实际的文件选择器没有任何变化。我在这里做错了什么?谢谢!!!

这是在复制文件时执行的 python 代码。我将包含文件选择器的实际屏幕分配给名为 MainScreenVar

的变量
        for i in range(0, self.execute_data_length):

            if self.execute_data[i][2] == "File" :
                shutil.copy2(self.execute_data[i][1], current_path)
                MainScreenvar = MainScreen()
                return MainScreenvar.ids.filechooser._update_files()
        mycursor.execute("DELETE FROM selection")
        mydb.commit()

这是 kivy 文件的一部分:

<MainScreen>:
FileChooserIconView:
    id:filechooser
    size_hint:1,.9
    pos_hint:{"top": .9}
    color: 0,0,0,0

kivy 文件选择器的源代码在这里: https://kivy.org/doc/stable/_modules/kivy/uix/filechooser.html

【问题讨论】:

    标签: python kivy kivy-language filechooser


    【解决方案1】:

    您的代码中的错误是以下行:

    MainScreenvar = MainScreen()
    

    正在创建MainScreen 的新实例。这不会是您的 GUI 中显示的实例,因此行:

    return MainScreenvar.ids.filechooser._update_files()
    

    正在调用 _update_files() 以获取未显示在 GUI 中的 FileChooserIconView。解决方案是使用对 GUI 中实际 FileChooserIconView 的引用。大概是这样的:

    MainScreenvar = self.manager.get_screen('main')
    

    但是,这只是一个猜测,因为您没有提供太多代码。这假设您发布的代码来自Screen,并且您为MainScreen 提供的namemain

    【讨论】:

    • 哦!!!从来没有意识到这一点。非常感谢,完美运行。现在每次执行函数时文件选择器都会更新
    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多