OptionsMenu只显示每个列表中的第一项?

时间:2018-06-13 17:11:03

标签: python tkinter optionmenu

这里我有一个基本的OptionsMenu和一个列表,里面有我的菜单选项。我需要做的是在选项菜单中仅显示子列表的第一项,但是当选择该项时,将子列表中的第二项传递给函数。

目前我可以显示所有子列表并将所有子列表传递给一个函数。我遇到的主要问题是试图显示第一项" ID 1"或" ID 2"在下拉菜单中。

import tkinter as tk


root = tk.Tk()

def print_data(x):
    print(x[1])

example_list = [["ID 1", "Some data to pass later"], ["ID 2", "Some other data to pass later"]]
tkvar = tk.StringVar()
tkvar.set('Select ID')

sellection_menu = tk.OptionMenu(root, tkvar, *example_list, command=print_data)
sellection_menu.config(width=10, anchor='w')
sellection_menu.pack()

root.mainloop()

这就是我得到的:

enter image description here

我想要的是什么:

enter image description here

正如您在第二张图片中所看到的,只有" ID 1"菜单中显示该ID的数据并打印到控制台。

我找不到任何文档或帖子来解决这个问题所以可能无法实现。

1 个答案:

答案 0 :(得分:1)

我能想到的唯一方法就是这个

import tkinter as tk


root = tk.Tk()

执行一个带有第一个索引的for循环,即ID

sellection_menu = tk.OptionMenu(root, tkvar,
                            *[ID[0] for ID in example_list],
                            command=print_data)

搜索给定的索引,但这很慢,如果使用大量数据则不太好

def print_data(x):
    for l in example_list:
        if x == l[0]:
            print(l[1])
            break


example_list = [["ID 1", "Some data to pass later"], 
                ["ID 2", "Some other data to pass later"]]`