Python 将图像从文件系统下载到kivy应用程序

Python 将图像从文件系统下载到kivy应用程序,python,python-3.x,image,kivy,python-imaging-library,Python,Python 3.x,Image,Kivy,Python Imaging Library,我有一个简单的python kivy应用程序和sqlite数据库 我想实现将我的照片从手机添加到应用程序的功能 如何在用户单击按钮或任何其他方式时打开文件管理器。 该文件应上载到其位于我的应用程序的文件夹(在./images文件夹中),并将其名称添加到我的数据库中 这可能吗? 还是将图像上传到数据库更好? (没有计划使用超过10幅图像) 我很乐意在文档或示例中看到合适解决方案的链接 更新 kivy FileChooser可以在我的电脑(ubuntu)上工作,但在手机上它会打开一个根文件夹,你在哪

我有一个简单的python kivy应用程序和sqlite数据库

我想实现将我的照片从手机添加到应用程序的功能

如何在用户单击按钮或任何其他方式时打开文件管理器。 该文件应上载到其位于我的应用程序的文件夹(在./images文件夹中),并将其名称添加到我的数据库中

这可能吗? 还是将图像上传到数据库更好? (没有计划使用超过10幅图像)

我很乐意在文档或示例中看到合适解决方案的链接

更新

kivy FileChooser可以在我的电脑(ubuntu)上工作,但在手机上它会打开一个根文件夹,你在哪里都找不到它

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.app导入MDApp
从kivy.core.window导入窗口
从kivy.lang导入生成器
来自kivy工厂进口工厂
从kivy.uix.modalview导入modalview
从plyer导入存储路径
从kivymd.uix.filemanager导入MDFileManager
从kivymd.theming导入管理器
从kivymd.toast导入toast
Builder.load_字符串(“”)
方向:“垂直”
间距:dp(5)
MDToolbar:
id:工具栏
标题:app.title
左[动作]项:[“菜单”,lambda x:None]]
标高:10
md_bg_颜色:app.theme_cls.primary_颜色
浮动布局:
MDRoundFlatIconButton:
文本:“开放式管理器”
图标:“文件夹”
位置提示:{'center_x':.5'center_y':.6}
发布时:app.file\u manager\u open()
''')
类示例(MDApp):
title=“文件管理”
定义初始(自我,**kwargs):
超级()
绑定(在键盘上=self.events)
self.manager\u open=False
self.manager=无
def生成(自):
返回工厂。ExampleFileManager()
def文件管理器打开(自):
如果不是自我管理者:
self.manager=ModalView(size\u hint=(1,1),auto\u dismise=False)
self.file\u manager=MDFileManager(
退出管理器=自我。退出管理器,选择路径=自我。选择路径)
self.manager.add_小部件(self.file_管理器)
self.file_manager.show(storagepath.get_home_dir())#将输出管理器显示到屏幕上
self.manager\u open=True
self.manager.open()
def选择路径(自身,路径):
''单击文件名时将调用它
或“目录选择”按钮。
:类型路径:str;
:param path:所选目录或文件的路径;
'''
self.exit_manager()
土司(路径)
def出口管理器(自身,*args):
''当用户到达目录树的根目录时调用'''
self.manager.disclose()
self.manager\u open=False
def事件(自身、实例、键盘、键码、文本、修改器):
''在移动设备上按下按钮时调用..''
如果键盘处于(1001,27)位置:
如果self.manager\u打开:
self.file_manager.back()
返回真值
示例().run()