Kivy, как правильно использовать FileBrowser во всплывающем окне - PullRequest
0 голосов
/ 12 декабря 2018

Я ищу способ создания всплывающего окна с файловым браузером внутри него, нажав кнопку на главном экране приложения.Приведенный ниже фрагмент - это класс, который вызывается при нажатии кнопки загрузки в главном приложении.Он отобразит всплывающее окно с помощью файлового браузера, но on_ * kwargs не запускают соответствующие методы.

class UploadPopup:
    def __init__(self, short_text='heading'):

        browser = FileBrowser(select_string='Select', cancel_state='down')
        browser.bind(on_success=self._fbrowser_success,
                     on_canceled=self._fbrowser_canceled,
                     on_submit=self._fbrowser_submit)

        self.popup = Popup(
            title=short_text,
            content=browser, size_hint=(0.9, 0.9),
            auto_dismiss=False
        )
        self.popup.open()

    def _fbrowser_canceled(self, instance):
        print('cancelled, Close self.')
        self.popup.dismiss()

    def _fbrowser_success(self, instance):
        print(instance.selection)
        self.popup.dismiss()

    def _fbrowser_submit(self, instance):
        print(instance.selection)
        self.popup.open()

Любые идеи ??

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я уже принял ответ, но хотел бы остановиться на нем немного.@ Джон-Андерсон был прав в том, что сборщик мусора собирал экземпляры.Первоначально я делал это ...

class MainScreen(Screen):
    ...
    @staticmethod
    def upload(self):
        this = UploadPopup()
    ...

class UploadPopup():
    ....
    see original post
    ....

Чтобы решить эту проблему, мне пришлось создать экземпляр в методе init моего класса MainScreen, добавить метод open в класс UpdatePopup и вызвать этот метод, когда кнопкабыл нажат.

class MainScreen(Screen):
    def __init__(self):
        self.upload_popup = UploadPopup()
    ...
    @staticmethod
    def upload(self):
        self.upload_popup.start()
    ...

class UploadPopup:
    def __init__(self, short_text='heading'):

        browser = FileBrowser(select_string='Select', cancel_state='down')
        browser.bind(on_success=self._fbrowser_success,
                     on_canceled=self._fbrowser_canceled,
                     on_submit=self._fbrowser_submit)

        self.popup = Popup(
            title=short_text,
            content=browser, size_hint=(0.9, 0.9),
            auto_dismiss=False
        )

    def start(self):
        self.popup.open()
    ....
0 голосов
/ 12 декабря 2018

Где бы вы ни звонили UploadPopup(), вам нужно сохранить ссылку на него, чтобы он не собирал мусор.Например, вы можете захотеть сделать self.pop = UploadPopup() в своем основном приложении.

Кроме того, в ваших методах обработки событий вы, вероятно, захотите заменить self.popup.open() на self.popup.dismiss().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...