Entry
单行输入框
from tkinter import *
fields = ['Name', 'Job', 'Pay']
input_prompt = 'Please input' #设置输入框内的默认提示文本
def fench(entries):
# 用来注册到按钮Fench上command的函数,获取tkinter变量列表,如果tkinter变量属性是默认文本,说明该输入框未输入,打印undef
for entry in entries:
if entry.get() != input_prompt:
print('input => ', entry.get())
else:
print('input => undef')
def judge_focusout(e):
# 失去焦点操作函数:输入框失去焦点时,如无输入值则设置默认文本
if not e.get():
e.set(input_prompt)
def judge_focusin(e):
# 获得焦点操作函数:输入框获取焦点时,如内容为默认文本则清空默认文本
if e.get() == input_prompt:
e.set('')
def make_form(root, fields):
# 创建一列Frame,每个Frame包括左边一个Label输入名,右边一个Entry输入框,返回一个包含所有Entry变量的列表
entries = [] # 返回的tkinter变量列表
for field in fields:
row = Frame(root)
label = Label(row, text=field, width=5)
e = StringVar() # 创建tkinter变量(StringVar,IntVar,DoubleVar,BooleanVar)
entry = Entry(row, textvariable=e) # 创建文本框
e.set(input_prompt) # 设置出事文本
entry.bind('<FocusIn>', lambda event, e=e: judge_focusin(e)) # 获取焦点事件操作
entry.bind('<FocusOut>', lambda event, e=e: judge_focusout(e)) # 失去焦点事件操作
label.pack(side=LEFT)
entry.pack(side=RIGHT, expand=YES, fill=X)
row.pack(side=TOP, expand=YES, fill=X)
entries.append(e)
return entries
if __name__ == '__main__':
root = Tk()
entries = make_form(root, fields)
root.bind('<Return>', lambda event: fench(entries)) # 点击回车时产生点击Fench按键的效果
Button(root, text='Fench', command=lambda: fench(entries)).pack(side=LEFT)
Button(root, text='Quit', command=root.quit).pack(side=RIGHT)
root.mainloop()