2014-09-28 233 views
4

我使用Tkinter与Python 2.7.6创建GUI。tkinter选项菜单 - 动态更新选项

我有一个下拉菜单,创建和初步禁止用下面的代码:

self.dropdown = Tkinter.OptionMenu(self, self.dropdownVar, "Select SED...") 
    self.dropdown.grid(column=0,row=1) 
    self.dropdown.configure(state="disabled") 

在用户选择一个目录,我调用一个函数onEnterDir()然后把它在该目录中的文件列表。所以,我有一个名为dirFiles的变量中的文件列表。

我想要的是,然后在下拉菜单中使用此dirFiles列表中的项目更新选项。我将如何做到这一点?

我的问题不同于其他人在这里,因为我只是想更新项目列表self.dropdown显示。它不依赖于任何其他小部件。我有一个我想要放入的Python列表。我该怎么做?

+0

这不是重复! – 2014-09-28 12:26:14

+2

我相信你引用了错误的链接。您的问题的旧答案在这里:http://stackoverflow.com/a/17252390/400286 – mjhm 2014-09-28 13:42:02

回答

3

您可以使用同样的技术在the answer你在问题中提到:

例如:

from Tkinter import * 
from tkFileDialog import askdirectory 
import os 

def onEnterDir(dropdown, var): 
    path = askdirectory() 
    if not path: 
     return 
    filenames = os.listdir(path) 
    dropdown.configure(state='normal') # Enable drop down 
    menu = dropdown['menu'] 

    # Clear the menu. 
    menu.delete(0, 'end') 
    for name in filenames: 
     # Add menu items. 
     menu.add_command(label=name, command=lambda: var.set(name)) 


root = Tk() 
dropdownVar = StringVar() 
dropdown = OptionMenu(root, dropdownVar, "Select SED...") 
dropdown.grid(column=0, row=1) 
dropdown.configure(state="disabled") 
b = Button(root, text='Change directory', 
      command=lambda: onEnterDir(dropdown, dropdownVar)) 
b.grid(column=1, row=1) 
root.mainloop() 
0

不得不self.dropdown首先设置为活动状态,然后将其在列表中像这样的选项:

self.dropdown.configure(state="active") 
    for fi in dirList: 
     self.dropdown['menu'].add_command(label=fi, command=Tkinter._setit(self, fi)) 

命令位是什么让我失望。