tkinter-Entry详解

本文介绍Entry控件,Entry控件使用户输入单行文本,例如,用户名,密码等。

前面我介绍过Text控件用来显示多行文本且用户可编辑;如果想显示多行文本但用户不能编辑,就使用Label控件。


首先通过一个例子来引入Entry控件,说明,博客中的实例代码都没有封装,使用最直接的方式,目的是为了直观的介绍知识点,可根据具体业务自行封装以便调用。

Entry的引入

pack布局

from tkinter import Tk,Entry,Label,Frame

main_win = Tk()
main_win.title('渔道的Entry控件')
width = 300 
height = 300 
main_win.geometry(f'{width}x{height}')

# 使用pack布局
user_name = Label(main_win, text='user name')
user_name.pack(side='left', anchor='nw')
user_name_entry = Entry(main_win, bd=5)
user_name_entry.pack(side='right', anchor='ne')
password = Label(main_win, text='password')
password.pack(side='left', anchor='nw')
password_entry = Entry(main_win, bd=5)
password_entry.pack(side='right', anchor='ne')

main_win.mainloop()

在这里插入图片描述

发现使用pack布局 达不到预期的效果(你可以自行调整布局参数),这个例子就体现了pack布局的局限性。

Frame+pack布局

前面介绍过Frame控件,看看能否结合Frame使布局更好一些。

from tkinter import Tk,Entry,Label,Frame

main_win = Tk()
main_win.title('渔道的Entry控件')
width = 300 
height = 300 
main_win.geometry(f'{width}x{height}')

# 使用frame+pack布局
frame_user_name = Frame(main_win, background='yellow', borderwidth=5)
frame_user_name.pack(fill='x')
user_name = Label(frame_user_name, text='user name')
user_name.pack(side='left', anchor='nw')
user_name_entry = Entry(frame_user_name, bd=5)
user_name_entry.pack(side='right', anchor='nw')

frame_password  = Frame(main_win, background='blue', borderwidth=5)
frame_password.pack(fill='x')
password = Label(frame_password, text='password')
password.pack(side='left')
password_entry = Entry(frame_password, bd=5)
password_entry.pack(side='right')

main_win.mainloop()

在这里插入图片描述

使用Frame+pack布局,显示效果好了很多。frame_user_name使用fill属性填充x方向,user_name和user_name_entry在Frame内部使用pack布局。从这个例子我们可以进一步理解到,pack布局的思想是"平均",即所有的控件都均匀分布,programmer的控制权相对有限。

grid布局

from tkinter import Tk,Entry,Label,Frame

main_win = Tk()
main_win.title('渔道的Entry控件')
width = 300 
height = 300 
main_win.geometry(f'{width}x{height}')

user_name = Label(main_win, text='user name')
user_name.grid(row=0, column=0)
user_name_entry = Entry(main_win, bd=5)
user_name_entry.grid(row=0, column=1)

password = Label(main_win, text='password')
password.grid(row=1,column=0)
password_entry = Entry(main_win, bd=5)
password_entry.grid(row=1, column=1)

main_win.mainloop()

在这里插入图片描述

使用grid布局,和我的期望效果一致。

place布局

from tkinter import Tk,Entry,Label,Frame

main_win = Tk()
main_win.title('渔道的Entry控件')
width = 300 
height = 300 
main_win.geometry(f'{width}x{height}')

user_name = Label(main_win, text='user name')
user_name.place(x=0) 
user_name_entry = Entry(main_win, bd=5)
user_name_entry.place(x=70)# x的单位是像素

password = Label(main_win, text='password')
password.place(x=0,y=30)
password_entry = Entry(main_win, bd=5, show="*")
password_entry.place(x=70, y=30)

main_win.mainloop()

在这里插入图片描述

使用place布局,也可以达到期望的效果。

Entry在tkinter中有36中属性,下面仅展示一些常用属性的使用。

background/bg

password_entry = Entry(main_win, bd=5, bg='yellow')

borderwidth/bd

password_entry = Entry(main_win, bd=5, bg='yellow')

cursor

password_entry = Entry(main_win, bd=5, bg='yellow', cursor='cross')

foreground/fg

password_entry = Entry(main_win, bd=5, bg='yellow', cursor='cross', fg='red')

show

show属性隐藏实际文本内容,使用show的值显示

password_entry = Entry(main_win, bd=5, bg='yellow', cursor='cross', fg='red', show='*')

在这里插入图片描述

state

state属性用来获取和设置Entry是否可输入。normal, disabled, readonly三种值。

password_entry = Entry(main_win, bd=5, bg='yellow', cursor='cross', fg='red', show='*')
print(password_entry['state']) # 输出 'normal'
password_entry = Entry(main_win, bd=5, bg='yellow', cursor='cross', fg='red', show='*')
password_entry.insert(0, '123456')
password_entry['state']='disabled'
print(password_entry['state']) # 输出 'disabled'

在这里插入图片描述

可以看到,password对应的Entry的颜色变成灰色,不能输入。

textvariable

动态设置Entry文本内容

username = StringVar(user_name_entry, 'frank')
user_name_entry['textvariable'] = username

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sif_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值