将tkinter listbox多个选择保存到列表中会给出无效的命令名“!toplevel3.!listbox”

2024-09-28 22:21:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,可以打开一个顶级窗口,放置一个listbox小部件,填充它,然后在关闭时将这些选择的值存储到一个列表中,但是我遇到了一个在任何google搜索中都找不到的错误。有什么想法吗

def select_exer():
    #Create the new Window
    sel_exer_window = tk.Toplevel(main)
    sel_exer_window.geometry("+%d+%d" % (x+1150,y+180))

    #Descriptive Text
    exer_text = tk.Label(sel_exer_window, text="Select your exercises").pack()

    exercise_list = tk.Listbox(sel_exer_window, selectmode='multiple')
    exercise_list.pack()

    def poplist():
        lst = exer_options
        exercise_list.insert("end",*lst)

    poplist()

    def on_closing():
        #Unlocks the next Button
        COUNT_DOWN_BUTTON.config(state="normal")
        #Closes the Window
        sel_exer_window.destroy()

        #lst_var = [exercise_list.get(idx) for idx in exercise_list.curselection()]
        lst_var = [exercise_list.get(idx) for idx in exercise_list.curselection()]
        print(type(lst_var))

    sel_exer_window.protocol("WM_DELETE_WINDOW", on_closing)

Tags: thetextvardefwindowpacktklist
1条回答
网友
1楼 · 发布于 2024-09-28 22:21:32

您正在调用sel_exer_window.destroy(),它调用exercise_list.destroy(),它将销毁Listbox。之后,您将尝试使用lst_var = [exercise_list.get(idx) for idx in exercise_list.curselection()]获取其值。你不能从一个被破坏的小部件中得到任何东西。我建议您将其改为:

def on_closing():
    #Unlocks the next Button
    COUNT_DOWN_BUTTON.config(state="normal")

    #lst_var = [exercise_list.get(idx) for idx in exercise_list.curselection()]
    lst_var = [exercise_list.get(idx) for idx in exercise_list.curselection()]
    print(type(lst_var))

    #Closes the Window
    sel_exer_window.destroy()

相关问题 更多 >