按钮不更新 tkinter 中的变量

Button not updating variable in tkinter

一直在开发个人应用程序,我的 TopLevel windows 之一无法正常工作。我需要变量 idd 是用户在 Entry 小部件中输入的任何内容,但出了点问题,我已经尝试了我所知道的 tkinter 的所有内容,但没有结果。

我生成的小部件如下:

def win_erase_id(parent):
    idd=-1
    wind=Toplevel(parent)
    wind.title("Enter id")
    lbl=Label(win,text="Enter player ID you want to erase:")
    svar=StringVar()
    ent=Entry(win,textvariable=svar)
    fr=Frame(win)

    def butA_m():
        idd=int(svar.get())
        wind.destroy()

    def butC_m():
        idd=-1
        wind.destroy()

    butA=Button(fr,text="Accept",command=butA_m,relief=RAISED)
    butC=Button(fr,text="Cancel",command=butC_m,relief=RAISED)
    lbl.grid(row=0,sticky="nswe")
    ent.grid(row=1,sticky="nswe")
    fr.grid(row=2,sticky="nswe")

    butA.pack(side=LEFT,fill=BOTH)
    butC.pack(side=RIGHT,fill=BOTH)
   
    wind.wait_window()
    return idd

我认为通过设置一个文本变量,然后在方法 butA_m 中询问该变量的值,最终变量将是我需要的整数,但我得到的值始终是 -1。尝试在 Entry 小部件上使用 .delete() 和 .insert() 但也不起作用。

编辑: 我不小心从 wind 实例中删除了一些“d”,但已经更正了它。

您的顶级 window 前两行称为 wind,但之后您引用了未绑定的 window win。尝试更改此启动,看看您是否仍然遇到同样的问题

nonlocal,正如我前面的人所说,实际上解决了它,我只是不明白如何使用它,但是在检查 this site 之后我最终纠正了我的代码并且有效。

    def butA_m():
        nonlocal idd
        idd=int(svar.get())
        wind.destroy()
    
    def butC_m():
        nonlocal idd
        idd=-1
        wind.destroy()