• Python tkinter - 第10章 文本控件(Text)属性


    第10章 文本控件(Text)
    文本控件(Text)用来显示多行格式化文本的控件。文本控件很强大, 很灵活, 可以完成很多功能.。除了显示多行文本之外,还可以编辑文字,显示图片,甚至是网页。
    可以把文字、标识(marks)、图片以及嵌入式的窗口放置到文本控件中。在不同的区域可以显示不同的格式。如果把回调函数于不同区域的事件联系起来,还可以实现对不同区域做出不同的响应。
    默认的情况下,文本控件是可以编辑的。可以使用鼠标或者键盘进行编辑。如果只想显示文本或者图片,可以禁止文本控件的编辑功能,只需设置state=tk.DISABLED就可以了。
    10.1 属性

    属性参数描述
    autoseparators单词之间的间隔。默认值是1
    background
    bg
    设置背景颜色,如bg=‘green’
    borderwidth
    bd
    文本控件的边框宽度。默认是1-2个像素。
    cursor文本控件的光标。默认是字符插入光标(一般是一个“I-beam”类型的光标)
    exportselection是否允许拷贝内容到剪贴板
    foregroundfg设置前景(文本)颜色
    font设置字体类型与大小
    height文本控件的高度。默认是24行。
    highlightbackground定义文本控件没有获得输入焦点状态下的高亮背景颜色。就是文本控件的亮边。
    highlightcolor与highlightbackground属性类似。不过是文本控件获得输入焦点时的边框颜色。
    highlightthickness文本控件获得输入焦点时的边框宽度。一般1-2个像素。
    insertbackground设置文本控件插入光标的颜色
    insertborderwidth插入光标的边框宽度。如果是一个非0的数值,光标会使用RAISED效果的边框。
    insertofftime
    insertontime
    这两个属性控制插入光标闪烁效果。就是插入光标的出现和消失的时间。单位是毫秒。
    insertwidth设置插入光标的宽度。
    maxundo最大Undo的次数。默认是0。
    padx水平边框的内边距
    pady垂直边框的内边距
    relief指定文本控件的边框3D效果,默认是flat,可以设置的参数;flat、groove、raised、ridge、solid、sunken
    selectbackground设置选中文本的背景颜色
    selectborderwidth设置选中区域边界宽度。
    selectforeground设置选中文本的颜色
    setgridboolean类型。为True时,可以让窗口最大化,并显示整个Text控件
    spacing1上行间距。如果有折行,只在第一行起作用
    spacing2折行之间的行间距
    spacing3下行间距。如果有折行,只在最后一行起作用。
    state定义文本控件的状态。状态有二种:NORMAL和DISABLED
    tabs定义按动Tab键时候的移动距离。
    takefocus定义是否可以使用Tab键移动输入焦点到该控件。
    undo开启undo/redo功能。
    width定义文本控件的宽度,单位是字符个数。
    wrap定义如何折行显示文本控件的内容
    xscrollcommand
    yscrollcommand
    将滚动条与文本控件关联起来,处理滚动条动作。滚动条分别对应水平或者垂直滚动条。
    10.1.1 autoseparators
    见undo/redo
    10.1.2 background(bg)
    设置文本控件的背景颜色。
    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1=tk.Text(root,bg='green')
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结果:
    在这里插入图片描述
    10.1.3 cursor
    定义文本控件的光标类型。默认是’插入光标’。详细说明见3.3.6节

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1=tk.Text(root,cursor='mouse')
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结果:
    在这里插入图片描述
    10.1.4 exportselection
    是一个布尔类型的值,在文本控件中没有作用。
    10.1.5 foreground(fg)
    定义输入文字的颜色。默认是黑色。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,fg='red')
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:
    在这里插入图片描述
    10.1.6 font
    定义字体的大小。文本控件可以设置多种字体同时显示。具体的方法参见tag。
    10.1.7 Height和width
    定义文本控件的高度和宽度。高度以行为单位,而宽度以字符为单位。高度与宽度的度量与字体的大小也有关系。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,height=5,width=10)
    b1.pack()
    
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    结果:
    在这里插入图片描述
    10.1.8 highlightbackground、highlightcolor和highlightthickness
    这三个参数的功能就是给文本控件添加一个外框。当没有获得输入焦点的时候,外框的颜色由highlightbackground设定,当由输入焦点的时候外框的颜色highlightcolor设定。外框的宽度由highlightthickness设定。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,height=5,width=10,
               highlightthickness=5,highlightcolor='red',
               highlightbackground='yellow')
    b1.pack()
    b2=tk.Entry(root)
    b2.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果:
    在这里插入图片描述
    在这里插入图片描述
    10.1.9 insertbackground 和insertborderwidth
    插入光标的背景颜色以及宽度。参见输入控件(Entry)中的说明。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,height=5,width=30,insertbackground ='red')
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:
    在这里插入图片描述
    说明:插入光标已经变成了红色的。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1=tk.Text(root,height=5,width=30,
               insertbackground ='red',
               insertborderwidth=-20)
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    结果:
    在这里插入图片描述
    说明:insertborderwidth是设置插入光标的边框。不过正的的数值只有一种效果,而设置为负的数值反而可以按照给定的数值设置插入光标的边框。
    10.1.10 insertofftime 和 insertontime
    这两个参数设置光标闪烁的时间。insertofftime 是光标不显示的时间,insertontime是光标显示的时间。这样就可以实现光标闪烁的效果。单位是毫秒。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1=tk.Text(root,height=5,width=30,insertofftime=200,insertontime=1000)
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    10.1.11 insertwidth
    定义插入光标的宽度。单位是像素。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,height=5,width=30,insertwidth=20)
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:
    在这里插入图片描述
    10.1.12 maxundo
    参见10.1.23 undo/redo章节。
    10.1.13 padx和pady
    设置文本控件的水平和垂直内边距。请参考前面的章节的描述。
    10.1.14 relief
    文本控件的边框的3D效果。具体说明见3.3.5节。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,height=5,width=30,bd=5,relief='groove')
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:
    在这里插入图片描述
    10.1.15 selectbackground
    选中文本的背景颜色。默认是蓝色的。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,height=5,width=30,selectbackground='red')
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:
    在这里插入图片描述
    在这里插入图片描述
    10.1.16 selectborderwidth
    选中区域的边框宽度。
    10.1.17 selectforeground
    选中文本的字体颜色。默认是白色的。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,height=5,width=30,selectforeground='yellow')
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:
    在这里插入图片描述
    10.1.18 setgrid
    是一个boolean参数。如果设置为True,会窗口最大化,这样可以显示完整的Text控件。
    10.1.19 spacing1,spacing2和spacing3
    spacing1:额外的上行间距。如果有折行显示,只在第一行增加间距
    spacing2;折行的行间距
    spacing3:额外的下行间距。如果有折行,只在最后一行显示。

    #代码1:
    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root)
    b1.pack()
    root.mainloop()
    #代码2:
    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,width=25,spacing1=20,
               spacing2=30,spacing3=50)
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    结果:
    在这里插入图片描述
    在这里插入图片描述
    说明:
    图二的第一行与顶部的间距,就是上行间距,有spacing1设置
    图二中的折行,由spacing2设置。程序中设置的是30,可以看到有明显的间距。
    图二中间距最大的就是设置了下行间距,spacing3=50。
    与图一对照就可以知道了,因为图一没有任何的间距设置。
    10.1.20 state
    文本控件只有2种状态:NORMAL和DISABLED。NORMAL状态可以编辑、输入文本等功能。而DISABLED不能进行任何操作。

    10.1.21 tabs
    tabs 是设置文本控件的tab的位置。默认的数值是8个字符,也就是每按一次Tab键,插入光标移动8个字符。如果已经输入了2个字符,那么只移动6个字符。也就是说每次移动8的倍数个字符的位置。
    在这里插入图片描述
    tabs属性可以设置每次移动的距离,具体的单位见下方说明:
    无参数:表示按照像素单位移动
    c=厘米
    i=英寸
    M=毫米
    P=打印机的点,即1/70英寸
    在这里插入图片描述
    说明:默认的Tabs为8个字符,不受字体大小的影响

    Tab的移动可以是非线性的,就是说每次移动的距离可以不一样,可以把定义的每次移动距离声明为一个元组,赋值给tabs属性,比如:
    在这里插入图片描述
    10.1.22 takefocus
    设置是否可以通过Tab获得输入焦点。默认是可以。如果takefocus被设置为False,就无法使用Tab键来获得输入焦点了,只能使用鼠标操作。

    10.1.23 undo/redo
    文本控件支持undo/redo功能。默认是不支持的,需要通过设置undo=True来开启undo/redo功能。此功能的实现是通过记录每一次修改来实现的。每一次的插入或者删除,都被记录在一个堆栈中。如果是删除,就记录删除的文字;如果是插入,就记录插入的文字。于此同时,还有记录删除或者插入的位置。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,undo=True)
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Undo/redo是按照光标的移动来判断的。如果光标是顺序移动,就不会插入新的标记。比如我们输入了“123and456”如果我们把光标重新移动到”and”处,并删除”and”,内置的算法会插入一个标记,与我们输入的”123and456”区隔。如果这个时候,调用undo功能,会首先恢复’and’,然后再删除“123and456”
    在这里插入图片描述
    这些标记是默认记录的。实际上可以通过autoseparators 属性来设置。默认情况autoseparators=True。如果把autoseparators=False,就会不记录每次的修改 。Undo会删除所有的输入内容,redo恢复所有的内容。简单粗暴。
    还有一个属性是maxundo,记录最大的undo次数的。默认值是0,也就是记录全部的修改行为。如果设置maxundo=5,就只记录5次修改行为。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,undo=True,maxundo=5)
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:
    在这里插入图片描述
    在这里插入图片描述
    说明:设置maxundo=5之后,系统只记录5次修改,只能undo5次。
    10.1.24 wrap
    wrap属性设定如何折行显示文本控件的内容。有两种方式来实现折行:
    (1)字符分隔
    当出现折行的时候,该方法可以在任何字符处分隔。
    (2)单词分隔
    当出现折行的时候,该方法会按照单词来分隔。

    #代码1:
    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1=tk.Text(root,width=15,wrap=tk.CHAR)
    b1.pack()
    root.mainloop()
    #代码2:
    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,width=15,wrap=tk.WORD)
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    结果:
    在这里插入图片描述
    在这里插入图片描述
    折行显示也可以关闭。这个时候所有的字符都在一行,除非输入回车。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    
    b1=tk.Text(root,width=15,wrap=tk.NONE)
    b1.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    10.1.25 xscrollcommand
    为文本控件增加水平滚动条。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    f=tk.Frame(root)
    s1 = tk.Scrollbar(f,orient=tk.HORIZONTAL)  
    b1 = tk.Text(f,width=20,height=5,
                 xscrollcommand=s1.set,wrap=tk.NONE)
    b1.pack()
    s1.pack(side=tk.BOTTOM,fill=tk.X) 
    s1.config(command=b1.xview)
    f.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    结果:
    在这里插入图片描述
    10.1.26 yscrollcommand
    为文本控件增加垂直滚动条。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    f=tk.Frame(root)
    s1 = tk.Scrollbar(f,orient=tk.VERTICAL)  
    b1 = tk.Text(f,width=20,height=5,
                 yscrollcommand=s1.set,wrap=tk.NONE)
    s1.pack(side=tk.RIGHT,fill=tk.Y) 
    s1.config(command=b1.yview)
    b1.pack()
    f.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    结果:
    在这里插入图片描述
    还可以为文本控件增加水平和垂直两个方向的滚动条。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    f=tk.Frame(root)
    s1 = tk.Scrollbar(f,orient=tk.VERTICAL)
    s2 = tk.Scrollbar(f,orient=tk.HORIZONTAL)
    b1 = tk.Text(f,width=20,height=5,wrap=tk.NONE,
                 yscrollcommand=s1.set,
                 xscrollcommand=s2.set)
    s1.pack(side=tk.RIGHT,fill=tk.Y) 
    s1.config(command=b1.yview)
    s2.pack(side=tk.BOTTOM,fill=tk.X) 
    s2.config(command=b1.xview)
    b1.pack(fill=tk.BOTH)
    f.pack()
    root.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    结果:
    在这里插入图片描述

  • 相关阅读:
    Vue3 用src动态引入本地图片
    Tomcat 为什么要破坏 Java 双亲委派机制?
    matplotlib笔记
    代码随想录第50天 | 84.柱状图中最大的矩形
    装饰模式 rust和java的实现
    JavaScript面向对象学习call和apply改变this指向问题(二)
    java学习--day19(Map集合&File类)
    基于工业智能网关的PLC远程控制解决方案
    LTspice学习笔记
    ts基础和基本使用
  • 原文地址:https://blog.csdn.net/weixin_42272768/article/details/100725243