在子帧Tkinter(Python)中管理命令

在子帧Tkinter(Python)中管理命令,python,tkinter,command,parent-child,Python,Tkinter,Command,Parent Child,我正在使用以下功能从Tkinter中的菜单打开输入对话框 def show_entry_fields(e): global pwd pwd = e.get() def showPwdInputBox(): # display an input box for the password c = Toplevel(root) c.title("Enter your password") c.geometry('200x160+230+130')

我正在使用以下功能从Tkinter中的菜单打开输入对话框

def show_entry_fields(e):
    global pwd 
    pwd = e.get()

def showPwdInputBox():
    # display an input box for the password
    c = Toplevel(root)
    c.title("Enter your password")
    c.geometry('200x160+230+130')
    Label(c, text="Password").pack() #(row=0)
    e1 = Entry(c, show="*")

    e1.pack()

    Button(c, text='OK', command= lambda: show_entry_fields(e1)).pack()
    Button(c, text='Close', command=c.destroy).pack()

当用户按下OK时,我需要关闭对话框。我怎样才能做到这一点呢?

如果您需要该函数做不止一件事,只需制作一个普通函数,而不是使用
lambda

def ok_command():
    show_entry_fields(e1)
    c.destroy()

Button(c, text='OK', command=ok_command).pack()
但是,我建议保存对每个小部件的单独引用,不要链接几何体管理,因为您不能引用已经链接了几何体管理方法的小部件。即使您不打算在这个特定的时间引用这些特定的小部件,这也是一个很好的实践

ok_button = Button(c, text='OK', command=ok_command)
ok_button.pack()

如果您需要函数执行多项操作,只需制作一个普通函数,而不是使用
lambda

def ok_command():
    show_entry_fields(e1)
    c.destroy()

Button(c, text='OK', command=ok_command).pack()
但是,我建议保存对每个小部件的单独引用,不要链接几何体管理,因为您不能引用已经链接了几何体管理方法的小部件。即使您不打算在这个特定的时间引用这些特定的小部件,这也是一个很好的实践

ok_button = Button(c, text='OK', command=ok_command)
ok_button.pack()

不知道为什么这会被否决。有人愿意解释一下问题出在哪里吗?朋友,因为我不在乎得分。@SDilmac:你是说你对这个问题投了否决票,而有人对你的问题投了否决票吗?@BryanOakley没有,先生,我没有时间去恨(重要的是发展和贡献)。我对得分一无所知。从这个网站,所以我利用了(我仍然在利用)。他是我的朋友,我将永远如此。如果我的朋友不高兴,那就是为什么我很抱歉。我不知道为什么这会被否决。有人愿意解释一下问题出在哪里吗?朋友,因为我不在乎得分。@SDilmac:你是说你对这个问题投了否决票,而有人对你的问题投了否决票吗?@BryanOakley没有,先生,我没有时间去恨(重要的是发展和贡献)。我对得分一无所知。从这个网站,所以我利用了(我仍然在利用)。他是我的朋友,我将永远如此。如果我的朋友不高兴,那就是为什么我很抱歉。