загрузка изображений из файловой системы в приложение kivy - PullRequest
1 голос
/ 25 мая 2020

У меня есть простое приложение python kivy и база данных sqlite.

Я хочу реализовать возможность добавлять свои фотографии с телефона в приложение

Как открыть файловый менеджер , когда пользователь нажимает кнопку, или любым другим способом. Файл должен быть загружен в папку, в которой находится мое приложение (в папке ./images), и его имя добавлено в мою базу данных

возможно ли это? Или лучше загружать изображения в базу? (не планирую использовать более 10 изображений)

Буду рад увидеть ссылки на подходящие решения в документации или примерах

UPDATE

kivy FileChooser работает на моем P C (ubuntu), но на телефоне он открывает папку root, которую вы нигде не можете получить из

1 Ответ

1 голос
/ 12 июня 2020

У меня работает

from kivymd.app import MDApp
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.factory import Factory
from kivy.uix.modalview import ModalView
from plyer import storagepath

from kivymd.uix.filemanager import MDFileManager
from kivymd.theming import ThemeManager
from kivymd.toast import toast


Builder.load_string('''


<ExampleFileManager@BoxLayout>
    orientation: 'vertical'
    spacing: dp(5)

    MDToolbar:
        id: toolbar
        title: app.title
        left_action_items: [['menu', lambda x: None]]
        elevation: 10
        md_bg_color: app.theme_cls.primary_color


    FloatLayout:

        MDRoundFlatIconButton:
            text: "Open manager"
            icon: "folder"
            pos_hint: {'center_x': .5, 'center_y': .6}
            on_release: app.file_manager_open()
''')


class Example(MDApp):
    title = "File Manage"

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        Window.bind(on_keyboard=self.events)
        self.manager_open = False
        self.manager = None

    def build(self):
        return Factory.ExampleFileManager()

    def file_manager_open(self):
        if not self.manager:
            self.manager = ModalView(size_hint=(1, 1), auto_dismiss=False)
            self.file_manager = MDFileManager(
                exit_manager=self.exit_manager, select_path=self.select_path)
            self.manager.add_widget(self.file_manager)
            self.file_manager.show(storagepath .get_home_dir())  # output manager to the screen
        self.manager_open = True
        self.manager.open()

    def select_path(self, path):
        '''It will be called when you click on the file name
        or the catalog selection button.

        :type path: str;
        :param path: path to the selected directory or file;
        '''

        self.exit_manager()
        toast(path)

    def exit_manager(self, *args):
        '''Called when the user reaches the root of the directory tree.'''

        self.manager.dismiss()
        self.manager_open = False

    def events(self, instance, keyboard, keycode, text, modifiers):
        '''Called when buttons are pressed on the mobile device..'''

        if keyboard in (1001, 27):
            if self.manager_open:
                self.file_manager.back()
        return True


Example().run()

Файловый менеджер KivyMD

plyer

...