KivyMD 文件管理器功能

Posted

技术标签:

【中文标题】KivyMD 文件管理器功能【英文标题】:KivyMD FileManager abilities 【发布时间】:2021-11-19 01:40:56 【问题描述】:

我希望有一个按钮,允许用户(iosandroid)在他们的库中选择一张照片并将其保存以供以后发送。我正在使用文件管理器打开管理器。我如何具体使用文件管理器来完成此操作?:(下面的代码,请注意第二个屏幕是更大概念的一部分,而不是整个应用程序):

.py

类Sec​​ondScreen(屏幕):

 def select_path(self, path):


  self.exit_manager()
  toast(path)


  def exit_manager(self, *args):

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




  def file(self):
      path = '/'  
      file_manager = MDFileManager(
      exit_manager=self.exit_manager,  
      select_path=self.select_path, 
     )
      file_manager.show(path)
 

.kv #在标有类的屏幕下

           MDFillRoundFlatButton:
                text: 'Click here'

                font_size: 20
                on_press: root.file()

所有的格式都正确,但它所做的只是在电脑上打开文件管理器,让我浏览我的所有文件。当点击“X”退出时,会弹出一个错误,说“经理没有属性 .dismiss()”。非常感谢任何帮助:)

【问题讨论】:

【参考方案1】:

虽然 Kivy(MD) 的 FileManager 很好,但实际上还有一个更好的替代方案,它来自 plyer module,特别是 filechooser API。它的作用是打开设备的默认文件管理器应用程序以选择文件夹、文件或保存文件。这是一个例子:

.py

def open_file(self):
    path = filechooser.open_file()[0] 
    # this method returns a list with the first index
    # being the path of the file selected
    print(path)

def open_file(self):
    path = filechooser.choose_dir()[0] 
    print(path)

.kv

MDFillRoundFlatButton:
    text: 'Open an image:'

    font_size: 20
    on_press: root.open_file()

MDFillRoundFlatButton:
    text: 'Choose a directory:'

    font_size: 20
    on_press: root.choose_folder()

有关此库的 API 的更多信息here。

注意事项:

    此文件选择器在 Windows 平台上非常弱,所以如果需要,我建议使用tkinterfiledialog

2.不是很明显它不能在 iOS 上运行吗? 它可能适用于 iOS,但只会打开一个图像选择器

【讨论】:

感谢您的帮助!我从没想过 tkinter 方法。你说的“不会在 ios 上工作”是什么意思? 有两个原因: 1. Plyer 不支持 iOS 的原生文件选择器; 2. iOS 默认情况下完全禁用存储访问,只能访问图像和视频(至少我是这样认为的,我不使用 iPhone),所以很明显文件选择器不会很快进入 iOS。希望这会有所帮助! 它确实有帮助,谢谢 :) 所以只是为了澄清如果我使用文件选择器,用户只能选择视频或照片? 关于那个......不......,我相信plyer目前不支持这一点。我以后可能会搜索类似的东西 经过一番搜索,我发现filechooser的方法确实需要*args和**kwargs,其中一个实际上是文件过滤器。所以,如果你想让你的文件选择器只查找视频和图像,你可以这样做:path = filechooser.open_file(filters=[["Music", "*mp3", "*ogg", "*aac"], ["Image", "*png", "*jpg"]])[0]。另一个注意事项是,虽然 iOS 不支持文件选择,但我阅读了 plyer 的源代码并发现它可能能够打开图像选择器,尽管我不确定并且我没有能力对其进行测试.

以上是关于KivyMD 文件管理器功能的主要内容,如果未能解决你的问题,请参考以下文章

.spec 文件中的“ModuleNotFoundError:没有名为 'kivymd' 的模块”

使用 kivymd 的文件管理器代码不起作用

为啥文件管理器不能在 android kivymd 上运行?

kivymd MDbottomnavigation on_tab_press

Kivymd 卡按钮功能

尝试使用 KivyMD 和 Python 显示 PDF 文件