Tkinter条目值未在顶层窗口

时间:2018-01-29 21:33:59

标签: python tkinter

出于某种原因,当我在此代码的输入字段中输入内容然后点击应该调用简单打印名称和首字母的保存按钮时,它不会占用当前输入框中的内容。

我的解释是,当单击按钮创建窗口时,它会从代码中调用任何调用但不动态检查输入框,即使我单击按钮保存(我认为会检查它)。关于如何做到这一点的任何想法?

这是一个顶层窗口,我用一个函数创建了主根,并按下了一个按钮调用此函数打开一个新窗口来编辑名称和首字母。

def SaveChanges(name, initials, person):
    print(name)
    print(initials)


##    if person.initials in employees: del employees[person.initials]
##    employees[str(initials)] = person
##    employees[str(initials)].name = str(name)
##    
##    Save()
##
##    CreateMain()





def EditEmployee(person):


    window = Toplevel()

    l = Label(window,text='Edit Employee')
    l.grid(row=0,column=0,columnspan=2)
    nameLabel = Label(window,text='Name:')
    nameLabel.grid(row=1,column=0)

    initialsLabel = Label(window,text='Initials:')
    initialsLabel.grid(row=2,column=0)


    name = Entry(window)
    name.grid(row=1,column=1)
    name = name.get()
    print(name)


    initials = Entry(window)
    initials.grid(row=2,column=1)
    initials = initials.get()
    print(initials)


    save = Button(window, text='Save',
                  command= lambda n=name, i=initials, p=person: SaveChanges(n,i,p))
    save.grid(row=3, column=0,columnspan=2)

1 个答案:

答案 0 :(得分:1)

现在,您可以在用户有机会输入任何内容之前收集数据。按下按钮时需要调用.get()

save = Button(window, text='Save',
              command= lambda: SaveChanges(name.get(),initials.get(),person.get()))

如果使用类和普通方法而不是lambda,这将更加整洁。