使用 tag 来指定文本的属性
创建一个指定背景颜色的 TAG
代码:
代码语言:javascript复制import tkinter as tk
root = tk.Tk()
t = tk.Text(root)
# 创建一个 TAG,其前景色为红色
t.tag_config('a', foreground='red')
# 使用 TAG 'a'来指定文本属性
t.insert(1.0, '123456789', 'a')
t.pack()
root.mainloop()
效果:
结果是文本颜色改变为红色了
同时使用两个文本指定同一个属性
没有特别设置的话,最后创建的那个会覆盖掉其它所有的设置
代码:
代码语言:javascript复制import tkinter as tk
root = tk.Tk()
t = tk.Text(root)
# 创建一个 TAG,其前景色为红色
t.tag_config('a', foreground='red')
t.tag_config('b', foreground='blue')
# 使用 TAG 'a'和'b'来指定文本属性
t.insert(1.0, '123456789', ('b', 'a'))
t.pack()
结果:
结果是文本的颜色不是按照 insert 给定的顺序来设置,而是按照 tag 的创建顺序来设置的
控制 tag 的级别
代码:
代码语言:javascript复制import tkinter as tk
root = tk.Tk()
t = tk.Text(root)
# 创建一个 TAG,其前景色为红色
t.tag_config('a', foreground='red')
t.tag_config('b', foreground='blue')
# 使用 tag_lower 来降低 b 的级别
t.tag_lower('b')
# 使用 TAG 'a'和'b'来指定文本属性
t.insert(1.0, '123456789', ('b', 'a'))
t.pack()
root.mainloop()
结果:
结果:文本内容颜色变为了红色,蓝色的作用级别小于红色了,即使是先创建了红色
对文本块添加 tag
tag_add 方法的使用
代码:
代码语言:javascript复制import tkinter as tk
root = tk.Tk()
t = tk.Text(root)
# 创建一个 TAG,其前景色为蓝色
t.tag_config('b', foreground='blue')
# 使用 tag_lower 来降低 b 的级别
t.tag_lower('b')
# 使用 TAG 'b'来指定文本属性
for i in range(10):
t.insert(1.0, '123456789n')
t.tag_add('b', '2.5', '2.end')
t.pack()
root.mainloop()
效果:
先向 Text 中添加了10行文本,创建一 tag,将第2行第6个至第二行行尾使用此 tag
使用自定义 mark 对文本块添加 tag
代码:
代码语言:javascript复制import tkinter as tk
root = tk.Tk()
t = tk.Text(root)
# 创建一个 TAG,其前景色为蓝色
t.tag_config('b', foreground='blue')
# 使用 tag_lower 来降低 b 的级别
t.tag_lower('b')
# 使用 TAG 'b'来指定文本属性
for i in range(10):
t.insert(1.0, '123456789n')
# 自定义两个 mark,并使用它们来指定添加 tag 的文本块
t.mark_set('ab', '3.1')
t.mark_set('cd', tk.END)
t.tag_add('b', 'ab', 'cd')
t.pack()
root.mainloop()
结果:
先向 Text 中添加了10行文本,创建两个 mark('ab'和'cd'),将使用这两个 tag 指定文本的文本块使用此 tag
使用 indexes 获得 Text 中的内容
分别使用内置的 indexes 和自定义 mark 来获取文本
get 方法的使用
代码:
代码语言:javascript复制import tkinter as tk
root = tk.Tk()
t = tk.Text(root)
# 创建一个 TAG,其前景色为红色
t.tag_config('a', foreground='red')
# 使用 TAG 'b'来指定文本属性
for i in range(10):
t.insert(1.0, '123456789n', 'a')
# 获得1.0-2.3的文本
print(t.get('1.0', '2.3'))
# 自定义两个mark,并使用它们来获得文本块
t.mark_set('ab', '3.1')
t.mark_set('cd', tk.END)
print(t.get('ab', 'cd'))
t.pack()
root.mainloop()
结果:
测试 delete 对 tag 的影响
delete 方法不会对 tag 造成影响,也就是说删除文本与 tag 没有任何关系
代码:
代码语言:javascript复制import tkinter as tk
root = tk.Tk()
t = tk.Text(root)
# 创建一个 TAG,其前景色为红色
t.tag_config('a', foreground='red')
# 使用 TAG 'b'来指定文本属性
for i in range(10):
t.insert(1.0, '123456789n', 'a')
# 自定义两个mark,并使用它们来获得文本块
t.mark_set('ab', '3.1')
t.mark_set('cd', tk.END)
t.tag_add('b', 'ab', 'cd')
# 删除(1.0 - 4.0)的文本
t.delete('1.0', '4.0')
t.pack()
root.mainloop()
效果:
(1.0-4.0)的文本全部初始删除了,剩余的文本全部以红色显示,即还保留 tag 的属性
使用 tag_delete 对文本属性的影响
代码:
代码语言:javascript复制import tkinter as tk
root = tk.Tk()
t = tk.Text(root)
# 创建一个 TAG,其前景色为红色
t.tag_config('a', foreground='red')
# 使用 TAG 'b'来指定文本属性
for i in range(10):
t.insert(1.0, '123456789n', 'a')
# 自定义两个mark,并使用它们来获得文本块
t.mark_set('ab', '3.1')
t.mark_set('cd', tk.END)
t.tag_add('a', 'ab', 'cd')
# 删除 tag 'a',注意这个操作时在tag_add之后执行的
t.tag_delete('a')
t.pack()
root.mainloop()
结果:
结果所有的文本没有了 tag('a')属性,即 tag_delete 会清除所有与此 tag 相关的属性,不论是之前还是之后