2017-02-28 81 views
5

現在文件選擇器打開作爲默認位置的根目錄,但我希望它跳過並默認打開內部存儲(sdcard),用戶可以從此處下載。Kivy - 更改FileChooser默認位置

這是一個剪斷我的代碼到目前爲止 類:

class LoadDialog(FloatLayout): 
    load = ObjectProperty(None) 
    cancel = ObjectProperty(None) 

在KV文件

<LoadDialog>: 
    BoxLayout: 
     size: root.size 
     pos: root.pos 
     orientation: "vertical" 
     FileChooserListView: 
      id: filechooser 

     BoxLayout: 
      size_hint_y: None 
      height: 30 
      Button: 
       text: "Cancel" 
       on_release: root.cancel() 

      Button: 
       text: "Load" 
       on_release: root.load(filechooser.path, filechooser.selection) 

實際加載代碼的定義:

def show_load(self): 
     content = LoadDialog(load=self.load, cancel=self.dismiss_popup) 
     self._popup = Popup(title="Load file", content=content, 
          size_hint=(0.9, 0.9)) 
     self._popup.open() 

def load(self, path, filename): 
     wimg = os.path.join(path, filename[0]) 
     self.image_source = wimg 
     self.dismiss_popup() 

所以基本上用戶不應該去1個目錄去SD卡,應該已經在那裏。最糟糕的情況是過濾所有其他文件夾,除了那些包含單詞sdcard的文件夾。

+0

現在SD卡的路徑不包含單詞SD卡。而SD卡不是內部存儲。 – greenapps

+0

從我看到的,在Android 4中至少內部存儲是sdcard這是一個symblink。我需要的位置基本上是DCIM文件夾的父節點 – Nick

+0

那麼這將是getExternalStorageDirectory()。 – greenapps

回答

6

設置路徑屬性。

FileChooserListView: 
    id: filechooser 
    path: "/your/path" 

要找到您的系統與Python上的目錄,你可以做這樣的事情:

import os 

for root, dirs, files in os.walk("/"): 
    for name in dirs: 
     if name == "DCIM": 
      print(root, name) 

要知道,它可能會發現一個名爲DCIM兩個或多個目錄,在你的SD卡和內部存儲。

+0

就像一般事情,我知道在我的HTC手機DCIM文件夾是在名爲SD卡的目錄。有沒有辦法總是找到DCIM文件夾?或者至少是內部存儲? – Nick

+0

@Nick你說sdcard是內部存儲的文件夾嗎? – EL3PHANTEN

+0

@尼克反正更新了答案 – EL3PHANTEN