我尝试创建任意数量的optionmenu,但是在尝试拉取每个optionmenu所选的StringVar()时遇到了麻烦。
目标:创建任意数量的选项菜单,它们具有连续的名称(最多为任意数量)和连续的变量名称,以跟踪当前的选项菜单值
例如,如果选项菜单如下所示:
import tkinter as tk
from tkinter import *
root = tk.Tk()
root.geometry()
dropdown1 = StringVar()
Dropdownoptions = [
"option1",
"option2",
"option3"
]
dropdownfirst = tk.OptionMenu(root, dropdown1, *Dropdownoptions)
dropdownfirst.grid(column=0, row=0)
root.mainloop()
如果使用字典,我不知道如何从每个选项菜单中提取值。当查看其他关于使用字典创建变量的问题时,大多数答案都归结为“学习如何使用字典”而不是回答问题。
在Tkinter Create OptionMenus With Loop中也有一个非常类似的问题,但遗憾的是,它不适用于我的情况。
带有网格和非工作按钮的新代码:
import tkinter as tk
def erase_option():
for (name, var) in options.items():
print(var.get())
# print(options['optionmenu4'])
# This just places label over dropdown, doesnt successfully take place for removal
labelforemoval = tk.Label(text=" ")
labelforemoval.grid(column=0, row=4)
labelforemoval.grid_forget()
root = tk.Tk()
Dropdownoptions = [
"option1",
"option2",
"option3"
]
maxval = 10
options = {}
for om, x in zip(range(maxval), range(maxval)):
name = f"optionmenu{om}"
var = tk.StringVar()
options[name] = var
name = tk.OptionMenu(root, var, *Dropdownoptions)
name.grid(column=0, row=x)
button = tk.Button(root, text="Erase 5th option", command=erase_option)
button.grid(column=0, row=maxval)
root.mainloop()
1条答案
按热度按时间ivqmmu1c1#
给予每个optionmenu一个
StringVar
示例。把这些示例保存在一个列表或字典中。要得到这些值,迭代列表。下面的代码创建了一个名为
options
的字典。它在一个循环中创建了一系列变量和选项菜单,并将每个变量添加到这个options
字典中。函数print_options
迭代列表,打印出每个选项的键和值。