Как сделать так, чтобы Kivy File Chooser автоматически обновлял sh в python - PullRequest
0 голосов
/ 28 мая 2020

Итак, я писал эту программу-проводник файлов. До сих пор я закодировал функцию копирования, и проблема, с которой я столкнулся, заключается в том, что после того, как я скопирую файл в его новый каталог (то есть в каталог, в котором я сейчас нахожусь в средстве выбора файлов), файл не отображается в текущем filechooser. Я использую вид значков, и я видел здесь только одно упоминание об этом в Интернете: Refre sh / 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

1 Ответ

0 голосов
/ 29 мая 2020

Ошибка в вашем коде - это строка:

MainScreenvar = MainScreen()

, которая создает новый экземпляр MainScreen. Это не будет тот экземпляр, который отображается в вашем GUI, поэтому строка:

return MainScreenvar.ids.filechooser._update_files()

вызывает _update_files() для FileChooserIconView, который не отображается в вашем GUI. Решение состоит в том, чтобы использовать ссылку на фактический FileChooserIconView, который находится в вашем GUI. Вероятно, что-то вроде:

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

Однако это только предположение, поскольку вы не предоставили большую часть своего кода. Это предполагает, что ваш опубликованный код взят из Screen, а name, который вы указали для MainScreen, это main.

...