Python kivy:如何在C盘外使用filechooser访问文件

chi*_*ffa 2 python filechooser kivy

我是Kivy的初学者.

当我尝试在kivy.uix.filechooser模块上重新实现教程时,我只能访问我的C:驱动器上的文件,而不能访问其他驱动器上的文件.我试图寻找filechoser的根源,但无济于事.

有没有办法访问其他驱动器?

Nyk*_*kin 6

你需要改变filechooser.path价值:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder

Builder.load_string('''
<MyWidget>:
    file_chooser: file_chooser
    FileChooserListView:
        id: file_chooser
''')

class MyWidget(BoxLayout):
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        self.file_chooser.path = "D:\\"

class MyApp(App):
    def build(self):
        return MyWidget()

if __name__ == '__main__':
    MyApp().run()
Run Code Online (Sandbox Code Playgroud)

更高级的例子:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.utils import platform

Builder.load_string('''
#:import lv kivy.uix.listview
#:import la kivy.adapters.listadapter

<MyWidget>:
    drives_list: drives_list
    file_chooser: file_chooser
    ListView:
        id: drives_list
        adapter:
            la.ListAdapter(data=root.get_win_drives(), selection_mode='single', allow_empty_selection=False, cls=lv.ListItemButton)
    FileChooserListView:
        id: file_chooser
''')

class MyWidget(BoxLayout):
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        self.drives_list.adapter.bind(on_selection_change=self.drive_selection_changed)

    def get_win_drives(self):
        if platform == 'win':
            import win32api

            drives = win32api.GetLogicalDriveStrings()
            drives = drives.split('\000')[:-1]

            return drives
        else:    
            return []

    def drive_selection_changed(self, *args):
        selected_item = args[0].selection[0].text
        self.file_chooser.path = selected_item

class MyApp(App):
    def build(self):
        return MyWidget()

if __name__ == '__main__':
    MyApp().run()
Run Code Online (Sandbox Code Playgroud)

获取从这里获取的可用驱动器号的食谱.