动态添加选项菜单 tKinter Python
Dynamic Addition of Option Menu tKinter Python
我对 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 个选项菜单,但是如果我在一个选项菜单中选择一个值,其他选项菜单的值也会改变。有人可以让我知道如何实现这一点。
谢谢,
桑蒂.
发生这种情况是因为你们每个 OptionMenu
都在使用相同的 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()
然后您可以通过字典访问每个 StringVars variable_dict
我对 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 个选项菜单,但是如果我在一个选项菜单中选择一个值,其他选项菜单的值也会改变。有人可以让我知道如何实现这一点。
谢谢, 桑蒂.
发生这种情况是因为你们每个 OptionMenu
都在使用相同的 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()
然后您可以通过字典访问每个 StringVars variable_dict