文本时窗口中必不可少的一部分,tkinter模块中,有3种常用的文本类组件,通过这3种组件,可以在窗口中显示以及输入单行文本、多行文本、图片等。
Label标签组件
Label组件的基本使用
Label组件是窗口中比较常用的组件,通常用于添加文字或图片,还可以定义Label组件中文字和图片的排列方式。
Label具体的语法如下:
Label(win,text='文本',justify='center')
其中,win是Label组件的父容器,text指定标签的文本;justify指定标签中拥有多行文本时最后一行文本的对齐方式
示例1:
from tkinter import *
win=Tk()
#标题
win.title('文本组件')
Label(win,text='文本',justify='center')
# textd定义Label标签里的文本内容,bg表示Label的背景颜色
txt1=Label(win,text="象",bg="#FFEBCD",width=5,padx=4,pady=4,font="10")
txt2=Label(win,text="狮",bg="#c1ffc1",width=5,padx=4,pady=4,font="10")
txt3=Label(win,text="虎",bg="#FFEBCD",width=5,padx=4,pady=4,font="10")
txt4=Label(win,text="豹",bg="#c1ffc1",width=5,padx=4,pady=4,font="10")
txt5=Label(win,text="狼",bg="#FFEBCD",width=5,padx=4,pady=4,font="10")
txt6=Label(win,text="狗",bg="#c1ffc1",width=5,padx=4,pady=4,font="10")
txt7=Label(win,text="猫",bg="#FFEBCD",width=5,padx=4,pady=4,font="10")
txt8=Label(win,text="鼠",bg="#c1ffc1",width=5,padx=4,pady=4,font="10")
# foreground设置label组件的文字颜色
txtr1=Label(win,text="→",padx=2,pady=2,foreground="#B22222").grid(row=1,column=2)
txtr2=Label(win,text="→",padx=2,pady=2,foreground="#B22222").grid(row=1,column=4)
txtb1=Label(win,text="↓",padx=2,pady=2,foreground="#B22222").grid(row=2,column=5)
txtb2=Label(win,text="↓",padx=2,pady=2,foreground="#B22222").grid(row=4,column=5)
txtl1=Label(win,text="←",padx=2,pady=2,foreground="#B22222").grid(row=5,column=4)
txtl2=Label(win,text="←",padx=2,pady=2,foreground="#B22222").grid(row=5,column=2)
txtt1=Label(win,text="↑",padx=2,pady=2,foreground="#B22222").grid(row=4,column=1)
txtt2=Label(win,text="↑",padx=2,pady=2,foreground="#B22222").grid(row=2,column=1)
# 设置斗兽棋游戏的棋子的位置
txt1.grid(row=1,column=1)
txt2.grid(row=1,column=3)
txt3.grid(row=1,column=5)
txt4.grid(row=3,column=5)
txt5.grid(row=5,column=5)
txt6.grid(row=5,column=3)
txt7.grid(row=5,column=1)
txt8.grid(row=3,column=1)
win.mainloop()
在Label组件中添加图片
在tkinter模块中,图片可以在多处使用,例如Label组件、button按钮以及Text文字区域等,但是添加图片时,需要先创建图像对象PhotoImage(),然后再在其他组件中引入该对象。例如在Label组件中添加一张图像:
from tkinter import *
win=Tk()
#标题
win.title('文本组件')
img=PhotoImage(file='cat.png')
Label(win,image=img).pack()
win.mainloop()
PgotoImage()方法不支持jpg格式的图片,如果需要在窗口中添加.jpg格式的图片,需要现在和引入第三方模块PIL
而如果Label组件中,既有文字,又有图片,则可以通过Label组件中的compound设置图片与文字的显示位置,其参数和含义如下:
参数值 | 含义 |
top | 图片位于文字的上方 |
bottom | 图片位于文字的下方 |
left | 图片位于文字的左侧 |
right | 图片位于文字的右侧 |
center | 文字位于图片上(图文重叠,且文字在图片的上层) |
Entry单行文本框组件
Entry组件的基本使用
Entry组件用于添加单行文本框,其特点是可以添加少量文字。例如登录窗口的用户名输入框和密码输入框。添加Entry组件的语法如下:
from tkinter import *
win=Tk()
#标题
win.title('文本组件')
user=PhotoImage(file="user.png") #用户名图标
psw=PhotoImage(file="psw.png") #密码图标
Label(win,image=user,bg="#fff").grid(row=0) #显示用户名图标
Entry(win).grid(row=0,column=1,padx=10,pady=10) #用户名文本框
Label(win,image=psw,bg="#fff").grid(row=1) #显示密码图标
Entry(win,show="*").grid(row=1,column=1,padx=10,pady=10) #密码文本框,输入的内容显示为“*”
Label(win,text="确定",relief="groove").grid(row=2,columnspan=2,pady=10)
win.mainloop()
很多app登录时需要设置密码,输入密码时,用户看到的并非是自己输入的密码,而是“****”样式的隐藏符号,在Entry组件中,可以通过show参数将用户输入的内容隐藏起来。,并且显示为用户指定的字符:
Entry(win,show='*')
Entry组件中各方法的使用
Entry组件中提供了三个方法,分别是get()、insert()、delete(),它们的具体功能:
get():获取文本框中的内容
insert()在文本框的指定位置添加内容:
entry.insert(4,'***')
insert()中的参数分别表示要添加文本的位置和内容
delete():在删除文本框中指定的内容:
entry.delete(1,2)
delete()中的参数分别表示删除文本区间的起始位置和结束位置
Text多行文本框组件
Entry组件虽然可以添加文字,但是文字只能在一行中显示,当文字较多时,无法换行显示,而Text多行文本框弥补了这一缺点。
Text组件的基本使用
Text组件内可以输入多行文本,当文本内容较多时,它可以自动换行。事实上,Text组件中不仅可以放置纯文本,还可以添加图片、按钮等,具体语法如下:
Text(win)
其中,win为父容器。
在Text组件中可以通过insert()方法来添加初始文本:
text=Text(win)
text.insert(INSERT,'aaaaa')
在Text组件中添加图片时,需要创建PhotoImage()对象,然后通过image_create()引入图像:
photo=PhotoImage(file='psw.png')
text.image_create(END,image=photo)
Text组件的索引
Text组件提供了index()方法,该方法可以用于指向Text组件中文本的位置,它与Python的序列索引一样,Text组件索引也是对应实际字符的位置。Text组件中,文本的索引值通常为字符串类型,并且指定Text索引的方法有多重,常见的有:
line.column:这种方式将索引位置的行号和列号以字符串的形式表现出来,并且中间以“.”分隔,例如“2.3”表示第2行第4列;
insert:插入光标的位置
end:最后一个字符的位置,如果字符串为end,表示所有文本的最后一个字符,如果字符串为line.end,表示当前行的最后一个字符位置。
+count chars:指定位置向后移动count个字符。
-count chars:指定位置向前移动count个字符。
Text组件的常用方法
Text组件提供了一些方法可以获取或编辑Text组件中的内容,常用的方法如下:
方法 | 含义 |
delete() | 删除Text组件中的内容 |
get() | 获取文本内容 |
mark_set() | 添加标记 |
search() | 搜索文本 |
edit_undo() | 撤销操作 |
edit_separator() | 添加分割线,如果再进行撤销操作时,不会撤销所有操作,而只是撤销上一次操作 |