Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter:动态添加下拉列表并获取其值_Python_Pandas_Tkinter - Fatal编程技术网

Python Tkinter:动态添加下拉列表并获取其值

Python Tkinter:动态添加下拉列表并获取其值,python,pandas,tkinter,Python,Pandas,Tkinter,我根据用户输入动态添加下拉列表。用户将输入一个标题。标题中的每个单词都有一个与其相关联的同义词列表。Tkinter将根据用户输入动态添加同义词下拉列表。但是,我无法单独访问每个下拉列表的值 lists变量是包含用户输入中每个单词的同义词的列表列表 def ok(): print ("value is:" + variable.get()) i = 0 while i < len(lists): OPTIONS = lists[i]

我根据用户输入动态添加下拉列表。用户将输入一个标题。标题中的每个单词都有一个与其相关联的同义词列表。Tkinter将根据用户输入动态添加同义词下拉列表。但是,我无法单独访问每个下拉列表的值

lists变量是包含用户输入中每个单词的同义词的列表列表

def ok():
    print ("value is:" + variable.get())

 i = 0
    while i < len(lists):

        OPTIONS = lists[i] 

        OPTIONS = OPTIONS.split(',')

        variable = StringVar(master)

        dropdown = OptionMenu(master, variable, *OPTIONS)
        dropdown.pack(side=LEFT, fill=X, expand=YES)

        button = Button(master, text="Swap", command=ok)
        button.pack(side=LEFT, expand=YES)

        i = i+1
def ok():
打印(“值为:”+变量.get())
i=0
而我(列出):
选项=列表[i]
OPTIONS=OPTIONS.split(“,”)
变量=StringVar(主)
下拉菜单=选项菜单(主、变量、*选项)
dropdown.pack(side=LEFT,fill=X,expand=YES)
按钮=按钮(主控,text=“Swap”,command=ok)
按钮包(侧边=左侧,展开=是)
i=i+1

有什么方法可以从我的下拉列表中访问设置的值吗?

使用
选项菜单中的
命令=
,您可以分配函数,当您更改选择时,该函数将获得选定值

import tkinter as tk

#--- functions ---

def on_select(text):
    print('text:', text)
    print('---')

#--- main ---

data = ['a,b,c', 'x,y,z']

root = tk.Tk()

for i, options in enumerate(data):
    options = options.split(',')
    op = tk.OptionMenu(root, tk.StringVar(), *options, command=on_select)
    op.pack()

root.mainloop()
command=
按钮中
期望函数不获取参数-即
def on_select():
command=
选项菜单中
期望函数获取单个参数-即
def on_select(文本):

此代码不需要
variable=tk.StringVar()


所以,您已经选择了值,但不知道它是在哪个
选项菜单中选择的-第一个还是第二个。使用
lambda
您可以分配将获得更多参数的函数,并且您可以将数字作为第二个参数

import tkinter as tk

#--- functions ---

def on_select(text, number):
    print('text:', text)
    print('number:', number)
    print('data[number]:', data[number])
    print('---')

#--- main ---

data = ['a,b,c', 'x,y,z']

root = tk.Tk()

for i, options in enumerate(data):
    options = options.split(',')
    op = tk.OptionMenu(root, tk.StringVar(), *options, command=lambda text, number=i:on_select(text, number))
    op.pack()

root.mainloop()
因此,现在第一个选项菜单在选择(文本,0)
时运行
,第二个选项菜单在选择(文本,1)
时运行
,这样函数就知道选择了哪个选项菜单,并且可以从数据中获得正确的值(或执行其他操作)



您还可以使用
StringVar()
获取选定的值。如果需要所有选定值,则必须为每个
选项菜单创建单独的
StringVar
,并保留在列表中。单击按钮后,您可以使用
for
循环变量列表来获取所有选定值

import tkinter as tk

#--- functions ---

def on_click():
    for number, var in enumerate(all_variables):
        print(number, '| selected:', var.get(), '| all:', data[number])

#--- main ---

data = ['a,b,c', 'x,y,z']

root = tk.Tk()

all_variables = []

for options in data:
    options = options.split(',')
    var = tk.StringVar()
    all_variables.append(var)
    op = tk.OptionMenu(root, var, *options)
    op.pack()

b = tk.Button(root, text='OK', command=on_click)
b.pack()

root.mainloop()

每个
OptionMenu
都需要自己的
variable
-但是你只需要为所有
OptionMenu
使用一个
变量,而不是
,而i
你可以使用
作为列表中的选项:
,它不需要
i
,谢谢你的回复,如何单独访问变量?如何为每个下拉列表指定自己的变量?在代码中,我看到了
variable
。你是怎么创造的?你们知道如何保持列表中的元素吗?所以,在列表中保留变量。这对我很有效!但是,当我从下拉列表中选择项目时,下拉列表的默认值不会更改。有没有办法得到这个?默认值是多少?如果您需要在开始时选择一些值,那么您可以
StringVar(value=options[0])