开始使用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”,但已对其进行了纠正。
答案 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()