【问题标题】:Tkinter entry values not updating in toplevel windowTkinter 条目值未在顶级窗口中更新
【发布时间】:2018-01-29 21:33:59
【问题描述】:

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

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

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

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)

【问题讨论】:

  • 请提供minimal reproducible example。上面的代码本身什么都不做。
  • 问题已经得到解答和解决,是否有必要这样做?
  • 没有什么是必要的。但是,提供minimal reproducible example 会提高您问题的质量,从而更有可能帮助他人。
  • 我认为给出的答案很快就概述了混乱所在。

标签: python tkinter


【解决方案1】:

您现在拥有的方式是在用户有机会输入任何内容之前收集数据。按下按钮时,您需要致电.get()

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

如果您使用类和普通方法而不是 lambda,这会更简洁。

【讨论】:

  • 非常感谢,我以为我已经尝试过了,但我已经像 n=name.get() 一样初始化了 lambda。我不知道我可以通过这种方式将参数传递给函数。
猜你喜欢
  • 2019-09-27
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 2022-08-02
相关资源
最近更新 更多