目录

  • 五、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()