Динамическое добавление меню опций 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

Другие вопросы по тегам