加载以前保存的答案 Tkinter OptionMenu

Loading previous saved answers Tkinter OptionMenu

在将数据加载到 tkinter 选项菜单时,我需要帮助来解决这个问题。我已经在 Whosebug 上阅读了一些答案,我相信我已经很接近了,但我看不出我错在哪里。

该应用程序是一个包含多个页面的问卷(我只添加了 2 页只是为了更容易理解该应用程序的内容),它将信息保存在 excel 文件中,现在我正在尝试加载该文件如果用户决定暂时保存并稍后继续,则返回信息。

Edited part below:

到目前为止,我所有加载的信息都在存储,但选项菜单没有刷新数据。

包含我开发的简单部分的完整 运行 代码如下:

import tkinter as tk, pandas as pd
from tkinter import ttk, messagebox

window = tk.Tk()

choices_y_n = ['-', 'Yes', 'No'] 
Questionlist = ["A. Is true?:", "B. Is True? :","C. Is True? :", "D. True? :"]
dash_entry_quality = [" - ", " - ", " - ", " - ", " - ", " - ", " - "]

def global_save(): 
    list_answers = list(map(lambda x: x.get(), var))
    a = ({"Q1": list_answers})    
    dfa = pd.DataFrame.from_dict(a, orient='index').transpose()
    writer = pd.ExcelWriter("save_data.xlsx", engine='xlsxwriter')
    dfa.to_excel(writer, sheet_name='Save Files')
    writer.save()
    messagebox.showinfo("Success!", "Progress successfully saved!")  

def load():
    global dash_entry
    file = pd.read_excel("save_data.xlsx")        
    dash_entry = file["Q1"]
    for r in range(len(Questionlist)): 
        var[r].set('')
        option_menu['menu'].delete(0, 'end')
        for c in dash_entry:
            option_menu['menu'].add_command(label = c, command = tk._setit(var[r], c))
    messagebox.showinfo("Success!", "information successfully loaded!")  

window.columnconfigure(0, minsize=100)
window.columnconfigure(1, minsize=150)
window.columnconfigure(2, minsize=50)     
tk.Frame.configure(window, background = "white")
ttk.Label(window, text="Group A Checklist", background = "white").grid(row=1, column=0, columnspan=3, pady = 10)
ttk.Label(window, text="Questions: ", background="white").grid(row=2, column=0,columnspan=2, padx=10, pady = 10, sticky="W")
global var, option_menu
var= [tk.StringVar(window) for i in range(len(Questionlist))]
for r in range(len(Questionlist)): 
    ttk.Label(window, text=Questionlist[r], background = "white").grid(row= r+3, column=0, columnspan=2, padx=10, pady = 10, sticky="W")
    option_menu = ttk.OptionMenu(window, var[r], *choices_y_n)
    option_menu.grid(row = r+3, column=2, padx=10, sticky="WE")
ttk.Button(window, text="Save values", command = global_save, width=18).grid(row=16, column=0, padx=10, pady=15, sticky="W")
ttk.Button(window, text="Load values", command = load, width=18).grid(row=17, column=0, padx=10, pady=15, sticky="W")

window.mainloop()

你把事情复杂化了。无需重建完整的 OptionMenu,您只需将包含当前答案的变量更新为加载的答案即可:

def load():
    file = pd.read_excel("save_data.xlsx")        
    dash_entry = file["Q1"]
    for r in range(len(Questionlist)): 
        var[r].set(dash_entry[r])
    messagebox.showinfo("Success!", "Information successfully loaded!")