2017-03-24 2 views
1

Ich versuche, mehrere Ordnernamen zu einem Optionsmenü hinzuzufügen. Der folgende Code fügt der Liste nur einen Ordnernamen hinzu, aber ich möchte alle Ordnernamen in dem Verzeichnis hinzufügen.Hinzufügen von mehreren Ordnernamen aus dem Verzeichnis zu OptionMenu Python

var = StringVar() 
os.chdir('C:\\Users\\mhoban') 
all_subdirs = [d for d in os.listdir('.') if os.path.isdir(d)] 
for dirs in all_subdirs: 
    dir = os.path.join('C:\\Users\\mhoban', dirs) 
    os.chdir(dir) 
    current = os.getcwd() 
    new = str(current).split("\\")[3] 

opt1 = OptionMenu(app, var, new) 
opt1.grid(row=0, column=1, padx=10, pady=10) 
opt1.configure(width = 40, bg = "White") 

Antwort

3

Sie müssen eine Liste von Menüoptionen bauen und dann auspacken, wo Sie new im Moment vorbei sind:

options = [] 
for dirs in all_subdirs: 
    ... # same 
    options.append(str(current).split("\\")[3]) 

options Auspacken:

opt1 = OptionMenu(app, var, *options) 

Hinweis: options wird das gleiche sein wie all_subdirs, so dass Ihre Verarbeitung nichts zu erreichen scheint. Verwenden Sie stattdessen all_subdirs.

+0

Ich bekomme einen sythax Fehler in dieser Zeile "opt1 = OptionMenu (app, var, * Optionen)" –

+1

@Peter Wood, zählen Sie Ihre Klammern, Sie sind vermisst. Und die 'options'-Liste ist die gleiche wie' all_subdirs', also kann OP sie auch ohne Iteration entpacken? – CommonSense

+0

@Peter Wood, ja, kein Problem. Aber noch einmal, ich denke, es lohnt sich, in Ihrer Antwort zu erwähnen, dass "all_subdirs" bereits eine Liste mit dir-Namen ist, so dass es überhaupt keine Notwendigkeit in einer anderen Liste gibt. 'opt1 = OptionMenu (app, var, * all_subdirs)' – CommonSense

Verwandte Themen