Python tkinter选项菜单-动态更新选项

Python tkinter选项菜单-动态更新选项,python,python-2.7,user-interface,tkinter,Python,Python 2.7,User Interface,Tkinter,我正在使用Tkinter和Python 2.7.6创建GUI 我有一个下拉菜单,使用以下代码创建并最初禁用: self.dropdown = Tkinter.OptionMenu(self, self.dropdownVar, "Select SED...") self.dropdown.grid(column=0,row=1) self.dropdown.configure(state="disabled") 用户选择一个目录后,我调用一个函数onEnterDir()

我正在使用Tkinter和Python 2.7.6创建GUI

我有一个下拉菜单,使用以下代码创建并最初禁用:

    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列表,上面列出了我想输入的内容。如何做到这一点?

您可以在上述问题中使用相同的技术:

例如:

import os
from functools import partial
from Tkinter import *
from tkFileDialog import askdirectory

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 name=name: var.set(name))
        # OR menu.add_command(label=name, command=partial(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()

必须先将self.dropdown设置为活动状态,然后放入如下选项列表:

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

命令位正是让我恼火的地方。

您有
选项菜单。设置菜单(*值)
,它在@falsetru的答案中做类似的事情。

这不是重复!我相信你引用了错误的链接。您的问题的旧答案是:为什么在由此代码创建的GUI中,只能选择最后一项?@R.GholizadehR.,我不明白。@falsetru,实际上,当选择目录时,其内容显示在选项菜单中,但选择不起作用。e、 g.选项菜单中有10项;如果选择第二个项目,选项菜单将显示第十个项目,并且它在那里被锁定。@R.GholizadehR.,啊,有一个bug;替换
菜单。添加命令行。我只是相应地更新了命令;更新之前,lambda中的
name
引用了最后一个
name
值(原因)。