动态添加选项菜单tKinter Python

动态添加选项菜单tKinter Python,python,tkinter,optionmenu,Python,Tkinter,Optionmenu,我对python还是个新手。我有一个要求,我必须读取一个数据文件,根据文件中记录的数量,我必须创建与该数据相关的相同数量的选项菜单。但选项菜单的选项可以从简单的列表中获取。请在下面查找代码 import tkinter as tk from tkinter import * root=tk.Tk() root.title("GridAssign") Grids=('Grid1','Grid2','Grid3','Grid4','Grid5') file=open(Datafilepath,

我对python还是个新手。我有一个要求,我必须读取一个数据文件,根据文件中记录的数量,我必须创建与该数据相关的相同数量的选项菜单。但选项菜单的选项可以从简单的列表中获取。请在下面查找代码

import tkinter as tk
from tkinter import *

root=tk.Tk()
root.title("GridAssign")


Grids=('Grid1','Grid2','Grid3','Grid4','Grid5')
file=open(Datafilepath,"r")
ing=file.read().splitlines()
print (len(ing))

variable = StringVar(root)
variable.set(Grids[0])

for i in range(len(ing)):

  label = tk.Label(root,text=ing[i])
  label.grid(row=i,pady=3,sticky=W)
  w=OptionMenu (root, variable, *tuple(Grids)))
  w.grid(row=i,column=2,pady=3,sticky=E)

root.mainloop()
上面的代码可以给我n个选项菜单,但如果我在一个选项菜单中选择一个值,其他选项菜单的值也会改变。有人能告诉我如何做到这一点吗

谢谢,
Santty.

发生这种情况是因为您的每个
选项菜单都使用相同的
StringVar
。因此,当一个OptionMenu对StringVar进行更改时,其他菜单自然也会反映该更改

要防止出现这种情况,可以为每个菜单使用单独的StringVar:

import tkinter as tk
from tkinter import *

root=tk.Tk()
root.title("GridAssign")


Grids=('Grid1','Grid2','Grid3','Grid4','Grid5')
file=open(Datafilepath,"r")
ing=file.read().splitlines()
print (len(ing))

variable_dict = {}

for i in range(len(ing)):
    variable = StringVar(root)
    variable.set(Grids[0])
    variable_dict[i] = variable

    label = tk.Label(root,text=ing[i])
    label.grid(row=i,pady=3,sticky=W)
    w=OptionMenu (root, variable, *tuple(Grids)))
    w.grid(row=i,column=2,pady=3,sticky=E)

root.mainloop()

然后,您可以通过字典
variable\u dict

访问每个StringVar。非常感谢您的快速响应。我们将尝试一下。