2016-05-01 6 views
0

Ich mag eine Datei-Explorer erstellen, aber einige Schwierigkeiten mit der id = tree.insert m()Baum tk (Datei-Explorer)

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) 

so das Problem ist die Funktion SUBS() das Problem s eigentlich aus der Tatsache, dass m mit ID = am Anfang sollte es nur durch die Funktion SUBS() verwendet werden, sonst ID bereits vorhanden und es kann nicht funktionieren .. Ich möchte ID = anstelle von X = in SUBS () aber ich kann nicht ..

+0

Was funktioniert nicht genau? Was ist das erwartete Ergebnis, das Sie wünschen? – VRage

+0

Nun, ich würde gerne eine Funktion, die listdir und fügen Sie die Ergebnisse zu jeder Zeile, wenn es ein Verzeichnis wie: wenn os.path.isdir() Ich möchte alle Unterdateien/dir jeder Zeile, bis nichts mehr hinzuzufügen. Also habe ich meinen Code geändert, aber ich habe einige Probleme mit der: während os.path.exists() – Raskaya

+0

ich kann nur ID = einmal, dass mein Problem, so brauche ich eine Funktion, die jede Unterdateien/Verzeichnisse für jedes Unterverzeichnis hinzufügen würde jede erste Reihe ("/"> var) – Raskaya

Antwort

0

Was willst du ist eine rekursive Funktion, das ist eine Funktion, die sich selbst nennt.

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

Es ruft alle Elemente im Verzeichnis ab und fügt sie dem Baum-Widget hinzu. Wenn sich ein anderes Verzeichnis als die Funktion selbst aufruft, sind bis sie keine Verzeichnisse mehr übrig haben.

+0

ty viel es funktioniert :) wie kann ich jedes dir schließen, weil alles offen ist, ist es etwas chaotisch: p soll ich tree.focus() verwenden? – Raskaya

+0

Froh, dass Sie es mögen, denken Sie daran, diese Antwort als korrekt zu markieren. Wenn Sie ein geschlossenes Baumelement wünschen, ändern Sie die Option 'open = True' in der' tree.insert() 'Methode zu' open = False' – VRage