Динамическое добавление меню опций tKinter 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 меню опций, но если я выберу одно значение в одном меню, значение другого меню также изменится. Может кто-нибудь, пожалуйста, дайте мне знать, как этого добиться.
Спасибо, Сэнти.
1 ответ
Это происходит потому, что каждый из ваших 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