tkinter选项菜单 - 快速更新选项

时间:2014-09-28 11:55:18

标签: 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(),然后获取该目录中的文件列表。所以,我在一个名为dirFiles的变量中有一个文件列表。

我想要的是然后使用此dirFiles列表中的项目更新下拉菜单中的选项。我该怎么做?

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

3 个答案:

答案 0 :(得分:4)

您可以在您提到的the answer中使用相同的技巧:

例如:

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

答案 1 :(得分:0)

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

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

命令位是让我失望的原因。

答案 2 :(得分:0)

您有OptionMenu.set_menu(*values),它在@falsetru的答案中执行类似的操作。