2016-05-01 90 views
0

我想創建一個文件瀏覽器,但m具有)一些麻煩與ID = tree.insert()樹TK(文件管理器)

def SUBS(path): 
    PO = "" 
    parent = tree.parent(XOM) 
    while os.path.exists(path+"/"+PO): 
      X1 = 0 
      List = os.listdir(path+"/"+PO) 
      for element in List: 
       X1 += 1 
       if os.path.isfile(path+"/"+element): 
       tree.insert(XOM,str(X1),text=element) 
       if os.path.isdir(path+"/"+element): 
       id = tree.insert(XOM,str(X1),text=element) 
       PO = element 
      break 
X = 0 
Path = "/" 
WinT = Tk() 
tree = ttk.Treeview(WinT ,height=15) 
tree.pack(expand=YES,fill=BOTH) 
tree.heading("#0" ,text="Directory") 

PATH = os.listdir(Path) 
for element in PATH: 
    X += 1 
    PaTh = Path+"/"+element 
    if "//" in PaTh: 
     PATH = PaTh.replace('//','/') 
    if "//" not in PaTh: 
     PATH = PaTh 
    if "." in element : 
     tree.insert('',str(X),text=element) 
    if "." not in element: 
     XOM = tree.insert('',str(X),text=element) 
     SUBS(PATH) 

所以問題是函數SUBS(在暴露出的問題實際上來自這樣一個事實,即m使用id =在開始時它應該只能通過函數SUBS()使用,否則id已經存在,它不能工作..我想在SUBS中使用id =而不是X = )但我不能..

+0

什麼不正確?你希望的結果是什麼? – VRage

+0

以及我想要一個函數,將listdir並將結果添加到每行,如果它是一個目錄如:如果os.path.isdir()我想每行的所有子文件/目錄,直到沒有剩下要添加。所以我修改了我的代碼,但m有一些麻煩與:while os.path.exists() – Raskaya

+0

我只能使用id =曾經是我的問題,所以我需要一個函數,將添加每個子文件/ dirs的每個子目錄每個初始行(「/」> var) – Raskaya

回答

0

你想要什麼是一個遞歸函數,這是一個函數,它自己調用。

def SUBS(path, parent):  
    for p in os.listdir(path): 
     abspath = os.path.join(path, p) 
     parent_element = tree.insert(parent, 'end', text=p, open=True) 
     if os.path.isdir(abspath): 
      SUBS(abspath, parent_element) 


path = "C:/" 
WinT = Tk() 
tree = ttk.Treeview(WinT ,height=15) 
tree.pack(expand=YES,fill=BOTH) 
tree.heading("#0" ,text="Directory") 
root = tree.insert('', 'end', text=path, open=True) 
SUBS(path, root) 
WinT.mainloop() 

它獲取目錄中的所有元素並將其添加到樹形控件中。如果它的另一個目錄比函數自己調用,直到他們沒有更多的目錄。

+0

ty很多它的工作:)只是我怎麼能關閉每個目錄,導致一切都打開它有點凌亂:我應該使用tree.focus()? – Raskaya

+0

很高興喜歡它,請記住標記此答案是正確的。如果你想關閉tree元素,在'tree.insert()'方法中將'open = True'選項改爲'open = False' – VRage