2017-02-28 4 views
5

지금 바로 파일 선택기가 기본 위치로 루트를 엽니 다.하지만이를 건너 뛰고 기본으로 내부 저장소 (sdcard)를 열면 사용자가 거기에서 내려갈 수 있습니다. Kivy - 변경 FileChooser defaul location

는 지금까지 내 코드의 클래스를 냈다된다

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() 

그래서 기본적으로 사용자는 sdcard에 도착하기 위해 디렉토리를 1 개 올라갈 필요가 없습니다. 이미 존재해야합니다. . 최악의 시나리오는 sdcard라는 단어를 제외하고 다른 모든 폴더를 필터링하는 것입니다.

+0

현재 sd 카드에 대한 경로에는 sdcard라는 단어가 없습니다. 그리고 SD 카드는 내부 저장소가 아닙니다. – greenapps

+0

안드로이드 4에서 나는 무엇을 보았습니다. 적어도 내부 저장 장치는 symblink 인 sdcard입니다. 필요한 위치는 기본적으로 DCIM 폴더의 부모입니다. – Nick

+0

그러면 getExternalStorageDirectory()가됩니다. – greenapps

답변

6

경로 속성을 설정하십시오.

import os 

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

그냥 sdcard에 내부에, 그것은 DCIM이라는 두 개 이상의 디렉터리를 찾을 수 있음을 유의하십시오

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

하는 파이썬을 사용하여 시스템에 디렉토리를 찾으려면, 당신은 이런 식으로 뭔가를 할 수 저장.

+0

일반적으로 나는 HTC 전화에서 DCIM 폴더가 sdcard라는 디렉토리에 있다는 것을 알고 있습니다. DCIM 폴더를 찾을 수있는 방법이 있습니까? 또는 적어도 내부 저장소? – Nick

+0

@ 닉 당신은 sdcard가 내부 저장소의 폴더라고 말하고 있습니까? – EL3PHANTEN

+0

@ 닉 어쨌든 대답을 업데이 트 – EL3PHANTEN