按钮不更新Tkinter中的变量

时间:2020-06-25 03:31:44

标签: python python-3.x tkinter tkinter-entry python-3.8

开始使用pesronal应用程序时,我的TopLevel窗口之一无法正常工作。我需要变量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”,但已对其进行了纠正。

2 个答案:

答案 0 :(得分:0)

您的顶层窗口在前两行中称为wind,但在此之后,您引用了未绑定的窗口win。尝试将其更改为开始,看看是否仍然遇到相同的问题

答案 1 :(得分:0)

非本地,正如在我真正解决它之前有人说过的那样,我只是不知道如何使用它,但是在检查了this site之后,我最终更正了我的代码,它开始工作了。

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