Text文本框组件是tkinter中最常用的组件之一,是比较复杂的组件,一般用于展示多行文本。单行文本通常使用Entry输入框组件
Text文本框组件类型网页中的富文本编辑框,不仅可以编辑文字,还可以设置文字颜色,插入超链接等。Text文本框组件是tk中的组件,在ttk中没有对其重新实现。
常用属性
属性名 |
说明 |
background |
背景颜色 |
fg |
前景色 文字的颜色 |
bd |
组件边框宽度。默认是2像素。 |
selectbackground |
选择文字时的背景色 |
xscrollcommand |
设置水平滚动条 |
yscrollcommand |
设置垂直滚动条 |
insertbackground |
输入框内光标的颜色 |
insertofftime |
光标闪烁时 消失持续时间 默认300 |
insertontime |
光标闪烁时 显示持续时间 默认600 |
insertwidth |
光标宽度 默认2像素 |
spacing1 |
每个段落的行高 默认0 |
spacing2 |
一个段落内的行高(没有回车,超过行宽换行的情况) 默认0 |
spacing3 |
段落底部,如果有换行在最后一行添 默认0 |
state |
文本框状态,默认NORMAL DISABLED(禁用) |
常用方法
属性名 |
说明 |
delete(startindex, [,endindex]) |
删除范围内字符,或删除指定字符 |
get(startindex, [,endindex]) |
获取文本内容,获取范围内的文本内容 |
insert(index, [,string]) |
在指定位置插入文本 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import tkinter as tk
win = tk.Tk()
win.geometry("500x300")
txt = tk.Text(selectbackground="red", insertbackground="blue", spacing2=10, bd=0)
txt.pack(fill=tk.BOTH, expand=True)
txt.insert(tk.END, "在最后插入一段内容\r\n")
for i in range(1, 10):
for j in range(1, i + 1):
txt.insert(tk.END, f"{j}x{i}={i * j} ")
txt.insert(tk.END, "\r\n")
win.mainloop()
|
Text组件示例
文本框标签相关方法
属性名 |
说明 |
tag_add(tagName, index1,index2) |
给指定范围内的文本添加标签 |
tag_bind(tagName,sequence,func) |
给标签绑定事件 |
tag_unbind(tagName,sequence) |
取消标签绑定的事件 |
tag_configure(tagName) |
标签选项配置 |
tag_delete(tagNames) |
删除标签 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
from tkinter import *
from webbrowser import open as webopen
win = Tk()
win.geometry('500x300')
text = Text(win)
text.tag_configure('link', foreground='blue', underline=True)
# 第三个额外参数会作为这段文本的标签
text.insert(END, 'pytk.net\r\n', 'link')
text.insert(END, "我是第二行,根据索引设置链接")
# 文字索引 行.列
text.tag_add("link", "2.12", "2.15")
# 为link标签绑定点击事件
text.tag_bind('link', '<Button-1>', lambda evt: webopen('www.pytk.net'))
text.pack(fill=BOTH)
win.mainloop()
|
文本框标签演示
嵌入图片和组件
这个功能还是挺强大的,可以在文本框内嵌入图片和组件,但是能用到的场景比较少。
属性名 |
说明 |
image_create |
在文本框嵌入图片 |
window_create |
在文本框嵌入组件 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
from tkinter import *
from tkinter.ttk import *
from PIL import Image, ImageTk
win = Tk()
win.geometry('500x300')
text = Text(win, bg="#fff")
text.insert(END, "插入一个图片")
img = Image.open("img.png")
img = img.resize((40, 40))
img = ImageTk.PhotoImage(img)
text.image_create(END, image=img)
# 嵌入按钮
text.window_create(END, window=Button(text="嵌入按钮"))
text.window_create(END, window=Label(text="嵌入标签"))
lsbox = Listbox()
lsbox.insert(END, "嵌入列表框")
text.window_create(END, window=lsbox)
ipt = Entry()
ipt.insert(END, "嵌入输入框")
text.window_create(END, window=ipt)
text.pack(fill=BOTH, expand=True)
win.mainloop()
|
文本框嵌入窗体