目录
- 五、Tkinter的Entry输入控件
五、Tkinter的Entry输入控件
Entry
控件是 Tkinter GUI 编程中的基础控件之一,它的作用就是允许用户输入内容。
常用语法:Entry( master, option)
Entry的常用属性如下 -
名称 | 说明 |
exportselection | 默认情况下,如果在输入框中选中文本会复制到粘贴板,如果要忽略这个功能,可以设置为 exportselection=0 |
selectbackground | 选中文字时的背景颜色 |
selectforeground | 选中文字时的前景色 |
show | 指定文本框内容以何种样式的字符显示,比如密码可以将值设为 show=“*” |
textvariable | 输入框内值,也称动态字符串,使用 StringVar() 对象来设置,而 text 为静态字符串对象 |
xscrollcommand | 设置输入框内容滚动条,当输入的内容大于输入框的宽度时使用户 |
常用Tkinter中常用动态数据类型 -
StringVar()、 BooleanVar()、DoubleVar()、IntVar()分别代表字符串、布尔值、浮点型、整型。
下面演示一个数字时钟,来简单说明动态数据类型的说明,代码如下 -
from tkinter import Tk, StringVar, Label
import time
win = Tk()
win.title("Python自学")
win.iconbitmap('./python.png')
win.geometry('720x480+100+100')
win.resizable(0, 0)
win.title('数字的时钟')
# 获取时间的函数
def gettime():
# 获取当前时间
dstr.set(time.strftime("%H:%M:%S"))
# 每隔 1s 调用一次 gettime()函数来获取时间
win.after(1000, gettime)
win.update()
# 生成动态字符串
dstr = StringVar()
# 利用 textvariable 来实现文本变化
lb = Label(win, textvariable=dstr, fg='green', font=("微软雅黑", 85))
lb.pack()
# 调用生成时间的函数
gettime()
# 显示窗口
win.mainloop()
Entry
常用方法 -
名称 | 说明 |
delete() | 根据索引值删除输入框内的值 |
get() | 获取输入框内的是 |
set() | 设置输入框内的值 |
insert() | 在指定的位置插入字符串 |
index() | 返回指定的索引值 |
select_clear() | 取消选中状态 |
select_adujst() | 确保输入框中选中的范围包含 index 参数所指定的字符,选中指定索引和光标所在位置之前的字符 |
select_from (index) | 设置一个新的选中范围,通过索引值 index 来设置 |
select_present() | 返回输入框是否有处于选中状态的文本,如果有则返回 true,否则返回 false。 |
select_to() | 选中指定索引与光标之间的所有值 |
select_range() | 选中指定索引与光标之间的所有值,参数值为 start,end,要求 start 必须小于 end。 |
演示代码如下 -
from tkinter import Tk, Entry
win = Tk()
# 设置主窗口
win.geometry('380x270')
win.title("Python自学")
win.iconbitmap('./Python.png')
win.resizable(0, 0)
# 创建输入框控件
entry1 = Entry(win, width=120)
# 放置输入框,并设置位置
entry1.pack(padx=20, pady=20)
entry1.delete(0, "end")
# 插入默认文本
entry1.insert(0, 'Python,网址:study.python.net')
# 得到输入框字符串
print(entry1.get())
# 删除所有字符
# entry1.delete(0, tk.END)
win.mainloop()
Entry控件验证功能
Entry
控件也提供了对输入内容的验证功能,比如要求输入全字母,你却输入了数字,这就属于非法输入。
名称 | 说明 |
validate | 指定验证方式,字符串参数,参数值有 focus、focusin、focusout、key、all、none。 |
validatecommand | 指定用户自定义的验证函数,该函数只能返回 True 或者 Fasle |
invalidcommand | 当 validatecommand 指定的验证函数返回 False 时,可以使用该参数值再指定一个验证函数。 |
focus | 当 Entry 组件获得或失去焦点的时候验证 |
focusin | 当 Entry 组件获得焦点的时候验证 |
focuson | 当 Entry 组件失去焦点的时候验证 |
key | 当输入框被编辑的时候验证 |
all | 当出现上边任何一种情况的时候验证 |
none | 默认不启用验证功能,需要注意的是这里是字符串的 ‘none’ |
下面做一下简单的实例演示 -
from tkinter import messagebox, Tk, END, Label, StringVar, Entry
win = Tk()
# 设置主窗口
win.geometry('380x270+250+200')
win.title("Python自学")
win.iconbitmap('./python.png')
win.resizable(0, 0)
# 创建验证函数
def check():
if entry1.get() == "Python自学":
messagebox.showinfo(title="输入验证", message="输入正确")
return True
else:
messagebox.showwarning(title="输入验证", message="输入不正确")
entry1.delete(0, END)
return False
# 新建
labe1 = Label(win, text="账号:")
labe2 = Label(win, text="密码:")
labe1.grid(row=0)
labe2.grid(row=1)
# 创建动字符串
Py_String = StringVar()
# 使用验证参数 validata,参数值为 focusout 当失去焦点的时候,验证输入框内容是否正确
entry1 = Entry(win, textvariable=Py_String, validate="focusout", validatecommand=check)
entry2 = Entry(win)
# 对控件进行布局管理,放在文本标签的后面
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
win.mainloop()