从 Tkinter Entry 小部件接收数据时遇到问题 Python 3
Having trouble receiving Data from Tkinter Entry widget Python 3
我正在尝试为我正在制作的程序实现一个登录系统。问题在于当用户单击提交时尝试检索输入并将其存储在变量中。
我已经阅读了几篇关于此的文章,但 none 似乎有效。以下有程序删除了几个部分,但遇到同样的问题。
#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()
我预计,当我单击 "test" 时,程序会打印我输入到要打印的 e1 中的值。但是,没有任何反应。我确实注意到,当我启动程序时,终端似乎输出了一些空行。
Henry Yik 的评论是正确的 - 如 所示,print()
语句在我单击按钮之前执行。
要修复它,我需要使用 lambda
函数:
tkinter.Button(master, text='Test', command=lambda: print(e1.get()) ).grid(row=12, sticky='W', pady=6, padx=6)
我正在尝试为我正在制作的程序实现一个登录系统。问题在于当用户单击提交时尝试检索输入并将其存储在变量中。
我已经阅读了几篇关于此的文章,但 none 似乎有效。以下有程序删除了几个部分,但遇到同样的问题。
#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()
我预计,当我单击 "test" 时,程序会打印我输入到要打印的 e1 中的值。但是,没有任何反应。我确实注意到,当我启动程序时,终端似乎输出了一些空行。
Henry Yik 的评论是正确的 - 如 所示,print()
语句在我单击按钮之前执行。
要修复它,我需要使用 lambda
函数:
tkinter.Button(master, text='Test', command=lambda: print(e1.get()) ).grid(row=12, sticky='W', pady=6, padx=6)