如何让 Kivy 文件选择器在 python 中自动刷新

How to Make Kivy File Chooser auto refresh in python

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

This is the python code that is executed when ever the file is copied. I assigned the actual screen that contains the file chooser to a variable named 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()

This is part of the kivy file:

<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

您的代码中的错误是:

MainScreenvar = MainScreen()

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

return MainScreenvar.ids.filechooser._update_files()

正在为 FileChooserIconView 调用 _update_files(),但您的 GUI 中没有显示。解决方案是使用对 GUI 中实际 FileChooserIconView 的引用。可能是这样的:

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

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