使用单个变量制作选项菜单的动态列表

时间:2013-06-02 19:54:34

标签: python tkinter

我试图用Tkinter做一些选项菜单。 想法是菜单是根据长度可以变化的数据创建的,所以我需要做动态的选项菜单列表。 我有一些关于情况的简单例子,而不是我正在使用的最终代码。 问题是我没有成功创建StringVars数组,因此我可以为每一行分别设置值。示例变量对于所有行都是通用的,因为我无法在StringVars列表中产生错误的情况下执行此类版本。

以下是示例:

from Tkinter import *

list1 = ['001 aaa', '002 bbb', '003 ccc']

status = ["On", "Off", "Unknown"]

testset1 = []
master = Tk()
variable = StringVar(master)

r = 0
for x in list1:
    x = x.split(" ", 2)
    Label(text=x[0], relief=RIDGE, anchor=W).grid(row=r, column=0, sticky=W+E)
    Label(text=x[1], relief=RIDGE, anchor=W).grid(row=r, column=1, sticky=W+E)
    apply(OptionMenu, (master, variable) + tuple(status)).grid(row=r, column=2, sticky=W+E)
    r += 1

mainloop()

1 个答案:

答案 0 :(得分:1)

这是一个使用列表解析的解决方案:您只需要在辅助函数中创建OptionMenu并返回您使用的变量。

from Tkinter import *

list1 = ['001 aaa', '002 bbb', '003 ccc']
status = ["On", "Off", "Unknown"]
master = Tk()

def create_option(r, x):
    x = x.split(" ", 2)
    variable = StringVar(master)
    Label(master, text=x[0], relief=RIDGE, anchor=W).grid(row=r, column=0, sticky=W+E)
    Label(master, text=x[1], relief=RIDGE, anchor=W).grid(row=r, column=1, sticky=W+E)
    OptionMenu(master, variable, *status).grid(row=r, column=2, sticky=W+E)
    return variable

variables = [create_option(r,x) for r, x in enumerate(list1)]
root.mainloop()