tkinter -- Text (2)

发布时间:2018-06-06 21:54:38编辑:Run阅读(4093)

    使用 tag 来指定文本的属性

    创建一个指定背景颜色的 TAG

    代码:

    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()

    效果:

    blob.png

    结果是文本颜色改变为红色了



    同时使用两个文本指定同一个属性

    没有特别设置的话,最后创建的那个会覆盖掉其它所有的设置

    代码:

    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()

    结果:

    blob.png

    结果是文本的颜色不是按照 insert 给定的顺序来设置,而是按照 tag 的创建顺序来设置的



    控制 tag 的级别

    代码:

    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()

    结果:

    blob.png

    结果:文本内容颜色变为了红色,蓝色的作用级别小于红色了,即使是先创建了红色



    对文本块添加 tag

    tag_add 方法的使用

    代码:

    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, '123456789\n')
    t.tag_add('b', '2.5', '2.end')
    t.pack()
    root.mainloop()

    效果:

    blob.png

    先向 Text 中添加了10行文本,创建一 tag,将第2行第6个至第二行行尾使用此 tag



    使用自定义 mark 对文本块添加 tag

    代码:

    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, '123456789\n')
    
    # 自定义两个 mark,并使用它们来指定添加 tag 的文本块
    t.mark_set('ab', '3.1')
    t.mark_set('cd', tk.END)
    t.tag_add('b', 'ab', 'cd')
    t.pack()
    root.mainloop()

    结果:

    blob.png

    先向 Text 中添加了10行文本,创建两个 mark('ab'和'cd'),将使用这两个 tag 指定文本的文本块使用此 tag




    使用 indexes 获得 Text 中的内容

    分别使用内置的 indexes 和自定义 mark 来获取文本

    get 方法的使用

    代码:

    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, '123456789\n', '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()

    结果:

    blob.png




    测试 delete 对 tag 的影响

    delete 方法不会对 tag 造成影响,也就是说删除文本与 tag 没有任何关系

    代码:

    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, '123456789\n', '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()

    效果:

    blob.png

    (1.0-4.0)的文本全部初始删除了,剩余的文本全部以红色显示,即还保留 tag 的属性



    使用 tag_delete 对文本属性的影响

    代码:

    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, '123456789\n', '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()

    结果:

    blob.png

    结果所有的文本没有了 tag('a')属性,即 tag_delete 会清除所有与此 tag 相关的属性,不论是之前还是之后

关键字

上一篇: tkinter -- Text(1)

下一篇: tkinter -- Text (3)