无法从Tkinter Entry小部件Python 3接收数据

时间:2019-04-23 02:59:52

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

我正在尝试为正在制作的程序实施登录系统。问题在于尝试在用户单击“提交”时检索输入并将其存储在变量中。

我已经阅读了几篇有关此的文章,但是似乎都没有用。下面的程序已删除了几个部分,但是遇到相同的问题。

#Imports
import tkinter

#Initilization
master = tkinter.Tk()

#Defineing Variables

#Submit
def Submit():
    print("Creating Account...")
    master.destroy()

#Cancel
def Cancel():
    print("Login failed!")
    master.destroy()

#Build GUI
def BuildGUI():
    #Lables
    tkinter.Label(master, text="All avalibe feilds required.").grid(row=0)

    tkinter.Label(master, text="First Name").grid(row=1)

    #Input Fileds
    User_NameFirst = tkinter.StringVar()

    e1 = tkinter.Entry(master, textvariable=User_NameFirst)

    e1.grid(row=1, column=1)

    #Buttons
    tkinter.Button(master, text='Cancel', command=Cancel).grid(row=11, column=0, sticky='W', pady=4)
    tkinter.Button(master, text='Enter', command=Submit).grid(row=11, column=1, sticky='W', pady=4)
    tkinter.Button(master, text='Test', command=print(e1.get())).grid(row=12, sticky='W', pady=6, padx=6)

#Debug
BuildGUI()

#Mainloop
tkinter.mainloop()

我希望,当我单击“测试”时,程序将打印我估算的值以打印到e1中。但是,没有任何反应。我确实注意到,当我启动程序时,终端似乎输出了几行空白。

1 个答案:

答案 0 :(得分:0)

Henry Yik的评论是正确的,如https://stackoverflow.com/a/5771787/11006183所示,print()语句是在单击按钮之前执行的。

要解决此问题,我需要使用lambda函数:

tkinter.Button(master, text='Test', command=lambda: print(e1.get()) ).grid(row=12, sticky='W', pady=6, padx=6)