Python ---(十)Tkinter窗口组件:Text

上一篇:Python —(九)Tkinter窗口组件:Scale


                                         The Tkinter Text Widget

##简介

Text(文本)组件用于显示和处理多行文本。在 Tkinter 的所有组件中,Text 组件显得异常强大和灵活,适用于多种任务。虽然该组件的主要目的是显示多行文本,但它常常也被用于作为简单的文本编辑器和网页浏览器使用。

##何时使用 Text 组件?

Text 组件用于显示文本文档,包含纯文本或格式化文本(使用不同字体,嵌入图片,显示链接,甚至是带 CSS 格式的 HTML 等)。因此,它常常也被用于作为简单的文本编辑器和网页浏览器使用。

##用法
当你创建一个 Text 组件的时候,它里边是没有内容的。为了给其插入内容,你可以使用 insert() 方法以及 “insert” 或 “end” 索引号:

from tkinter import *

root = Tk()

text = Text(root,width=30,height = 2)
text.pack()

text.insert(INSERT,"I love \n")
text.insert(END,"Study.com!")


mainloop()

在这里插入图片描述                           在这里插入图片描述
   (解析:首先还是先来个root跟窗口,然后在实例化Test组件时text = Text(root,width=30,height = 2),参数我们可以设置宽度为30,30的单位就是30个平均字符的的单位,字符的平均宽度,那么30这个的字符平均宽度就相当于差不多有30个字符那么宽,height高设置为2,就代表行数,即有2行。此时运行是不会显示任何内容的,是空的文本
   往里面插入数据仍然可以使用insert方法,关于他的参数,我们熟悉的索引值可以END,END表示是在末尾处插入,但是这里还可以用INSERT,INSERT就表示输入光标所在的位置,就是你打字那一条闪来闪去的,那刚开始输入光标肯定是在左上角即0行0列的位置了,可以看到第一张截图,同时我们还可以对文本里的内容进行编辑,增删改,换行输入都可以,如第二张截图)

值得一提的是,Text 组件的 insert() 方法有一个可选的参数,用于指定一个或多个“标签”(标签用于设置文本的格式,请参考下方【Tags 用法】)到新插入的文本中:

from tkinter import *
 
root = Tk()
 
text = Text(root, width=20, height=5)
text.pack()
 
# 设置 tag
text.tag_config("tag_1", backgroun="yellow", foreground="red")
 
# "insert" 索引表示插入光标当前的位置
text.insert("insert", "I love ")
text.insert("end", "FishC.com!", "tag_1")
 
root.mainloop()

在这里插入图片描述

Text 组件不仅支持插入和编辑文本,还支持插入一这些组件,比如一个按钮,可以使用 window_create() 来实现

from tkinter import *

root = Tk()

text = Text(root,width=30,height = 5)
text.pack()

text.insert(INSERT,"I love \n")
text.insert(END,"Study.com!")

def show():
    print("哟,我被点了")

b1 = Button(text,text = "点我呀",command=show)
text.window_create(INSERT,window=b1)

mainloop()

在这里插入图片描述
   (解析:先把行数给改为5,要插入一个组件,那么需要先生成一个组件,需要注意的是,第一参数不再是root根窗口咯,因为是要插入到Text组件,所以应该是写Text组件的实例化对象text,然后按钮被点击后就会触发show函数,
   然后还有一步就是用text对象的window_create方法完成在INSERT的位置(这些按钮嘛,window窗口的组件,所以叫window_create),即输入光标的位置插入一个window=b1,即window这个选项设置为b1,b1就是待插入按钮Button的实例化对象)

Text 还支持插入 image 对象,即图片,可以用image_create()来实现,下面实现当按下按钮就会在末尾插入图片的案例

from tkinter import *

root = Tk()

text = Text(root,width=30,height = 30)
text.pack()

photo = PhotoImage(file = "test.gif")


def show():
    text.image_create(END,image = photo)

b1 = Button(text,text = "点我呀",command=show)
text.window_create(INSERT,window=b1)


mainloop()

在这里插入图片描述
   (解析:在上面例子的基础上,首先把图片导入photo = PhotoImage(file = “test.gif”)生成photo图片对象,刚刚插入组件是window_create方法,那么同理插入图片就是用image_create方法,因为是按下按钮后插入,那么在show方法中实现,那么插入按钮组件时需要将按钮组件的实例化对象传给window选项,同理这里也有个image选项需要等于图片的实例photo,就可以实现了)

删除 Text 组件中的内容可以用 delete() 方法,下边代码用于删除所有内容(也包含 window 和 image 对象,但不会删除 marks 的内容):

text.delete(1.0, "end")

删除单独一个字符(或者一个 window 对象,或者一个 image 对象),你可以仅使用一个参数:

text.delete(b1)

将 state 选项从默认的 “normal” 修改为 “disabled”,使得 Text 组件中的内容为“只读”形式。不过需要注意的是,当你需要进行任何修改的时候,记得将 state 选项改回 “normal”,否则 insert() 和 delete() 方法都会失效。

获得 Text 组件的内容,可以使用 get() 方法(仅获取文本内容):

contents = text.get(1.0, "end")

在下边例子中,通过校检 Text 组件中文本的 MD5 摘要来判断内容是否发生改变:
   (比如说你这个笔记本程序,或者说你重新写个IDLE,都可以,你都有输入框,那么有输入框,当用户在关闭的时候,程序应该自动检测内容是否发生改变,如果有改变,而用户忘记保存了,这时我们就应该给出提示善意地提醒是否要保存)

from tkinter import *
import hashlib


root = Tk()

text = Text(root,width = 30,height = 5)
text.pack()


text.insert(INSERT,"I love baidu.com")
contents = text.get("1.0",END)   #原始内容

def getSig(contents):
    m = hashlib.md5(contents.encode())
    return m.digest()

sig = getSig(contents)     #获取原始内容的

def check():
    contents = text.get("1.0",END)
    if sig != getSig(contents):
        print("警报:内容发生变动!")
    else:
        print("风平浪静~~")
    
    
Button(root,text = "检查",command = check).pack()

root.mainloop()

在这里插入图片描述                              在这里插入图片描述
   (解析:首先他的实现原理就是:先获取原始的内容,然后将原始的内容进行一个md5的hash获得他的md5的值,然后点击按钮后,触发相应的函数再一次获取内容,同时获取它对应md5的值,再来和原始内容获取的md5的值作比较就可以了,因为一个内容只能产生一个唯一的散列,不一样就说明内容发生了改变

   那么这里就是contents = text.get(“1.0”,END) 先获取了原始内容,然后下面封装了一个获取md5值的方法,只需要传入内容就可以返回对应md5的值,获取了原始内容就调用getSig得到sig,然后这个函数里边获取md5的值需要用到一个hashlib的模块,m = hashlib.md5(contents.encode()),这里需要进行一个二进制编码,然后获取md5的值,获得之后就在这个m里边,返回m.digest,获得他的摘要,我们只要得到一个简单的摘要的值就可以了,然后匹配摘要看是否一样,一样就没有变动)

index() 方法用于将所有支持的“索引”格式(请参考下方【Indexes 用法】)转换为“行.列”格式的索引号:

from tkinter import *
 
root = Tk()
 
text = Text(root, width=20, height=5)
text.pack()
 
print(text.index("insert"))
text.insert("insert", "You are good!")
print(text.index("insert"))
 
root.mainloop()

在这里插入图片描述
i如果你需要跟踪一个位置,那么你可以将该位置“标记”下来(请参考下方【Marks 用法】):

from tkinter import *
 

root = Tk()
 
text = Text(root, width=20, height=5)
text.pack()
 
text.insert("insert", "You are good!")
text.mark_set("here", '1.8')
text.insert("here", "very ")
 
root.mainloop()

在这里插入图片描述

最后,使用 search() 方法可以搜索 Text 组件中的内容。你可以提供一个确切的目标进行搜索(默认),也可以使用 Tcl 格式的正则表达式进行搜索(需设置 regexp 选项为 True):
   (使用 search() 方法可以搜索 Text 组件中的内容。但是传统的 search() 方法只查找到一个,就返回,我们可以加入一个循环,查找所有的内容。)

from tkinter import *


root = Tk()

text = Text(root,width = 30,height = 5)
text.pack()


text.insert(INSERT,"I love baidu.com")


def getIndex(text, index):
    return tuple(map(int, str.split(text.index(index), ".")))
 
start = 1.0
while True:
    pos = text.search("o", start, stopindex=END)
    if not pos:
        break
    print("找到啦,位置是:", getIndex(text, pos))
    start = pos + "+1c"  # 将 start 指向下一个字符

root.mainloop()

在这里插入图片描述
   (解析:start = 1.0,首先定义开始开始的位置,即第一行第0列, pos = text.search(“o”, start, stopindex=END),然后在循环里用text对象的search方法,第一个参数就是要找的内容,第二个参数就从哪里开始,第三个参数就是到哪里结束,就是从1.0搜索到文本最后,如果没有找到就直接break,跳出循环即可,否则的话就打印,这里封装个把pos转化成人类能够读懂的位置,上一章讲了用text的index方法可以把任何支持的格式转化为默认的行列字符串的格式,然后这里希望转化后变成元组返回, 打印出一个位置后,就需要发生变动,位置进行一个改变,指向下一个位置:start = pos + "+1c"即将 start 指向下一个字符)

如果忽略 stopindex 选项,表示直到文本的末尾结束搜索。设置 backwards 选项为 True,则是修改搜索的方向(变为向后搜索,那么 start 变量你应该设置为 END,stopindex 选项设置为 1.0,最后 “+1c” 改为 “-1c”)

恢复”和“撤销”操作

Text 组件还支持“恢复”和“撤销”操作,这使得 Text 组件显得相当高大上。只需要简单地设置undo = True(默认是False)就开启Text组件的撤销功能,然后调用对应方法来实现即可   (就是如果你输错一段文本可以点撤销,或者说不小心删除一个文本,也可以撤销删除操作,)
from tkinter import *

root = Tk()

text = Text(root,width = 30,height = 5, undo=True)
text.pack()


text.insert(INSERT,"I love baidu.com")


def show():
    text.edit_undo()

Button(root,text = "撤销",command=show).pack()

root.mainloop()

在这里插入图片描述                  在这里插入图片描述在这里插入图片描述                  在这里插入图片描述
   (解析:首先在初始化Text组件时加上undo选项,设置为Ture,因为他默认是False,开启后再加个Button来测试,当点击按钮后,执行触发command绑定的show函数,text.edit_undo(),show函数里边就调用了edit_undo方法就可以了,这里要注意的是,如果undo没打开的话,这里就不会有响应,要打它这个功能才可以,可以看到把后面的删除了,点撤销,他又会出现了,在撤销就会全部都没了,把插入操作也撤销完了,再点撤销就会抛出异常,因为没东西可以撤销了)

   其实他的原理就是Text 组件内部有一个栈专门用于记录内容的每次变动,所以每次“撤销”操作就是一次弹栈操作,“恢复”就是再次压栈。   (意思就是说,当你开启这个undo为True的话,他就会有一个栈,你每一次操作他都会记住,记录在栈中,每一次进行撤销操作,就会从栈顶弹出然后把他恢复

   默认情况下,每一次完整的操作将会放入栈中。但怎么样算是一次完整的操作呢?Tkinter 觉得每次焦点切换、用户按下 Enter 键、删除\插入操作的转换等之前的操作算是一次完整的操作。例如我输入"我爱你",然后停一下,不换行,什么都不做,然后在输入"才怪咧",当按下撤销就会直接把"我爱你才怪咧"一起撤销完了,但我的期望是第一次按撤销只撤销"才怪咧",后面才撤销完,或者说我想一个字一个字地撤销

   那我们能不能自定义呢?比如我希望插入一个字符就算一次完整的操作,然后每次点击“撤销”就去掉一个字符。

   当然可以!做法就是先将 autoseparators 选项设置为 False(因为这个选项是让 Tkinter 在认为一次完整的操作结束后自动插入“分隔符”),然后绑定键盘事件,每次有输入就用 edit_separator() 方法人为地插入一个“分隔符”:

from tkinter import *


root = Tk()

text = Text(root,width = 30,height = 5, undo=True,autoseparators = False)
text.pack()


text.insert(INSERT,"I love baidu.com")

def callback(envent):
    text.edit_separator() #人为地插入分割符

#<Key>表示键盘事件,下面表示绑定了一个键盘事件,
#就是每次输入的时候就触发callback函数加一个分割符
text.bind("<Key>",callback)


def show():
    text.edit_undo()

Button(root,text = "撤销",command=show).pack()
    

root.mainloop()

在这里插入图片描述                  在这里插入图片描述
在这里插入图片描述                  在这里插入图片描述

   Indexes用法: Indexes(索引)是用来指向 Text 组件中文本的位置,跟 Python 的序列索引一样,Text 组件索引也是对应实际字符之间的位置。
   Tkinter 提供一系列不同的索引类型:

         ❤"line.column"(行/列)

         ❤"line.end"(某一行的末尾)

         ❤"insert"

         ❤"current"

         ❤"end"

         ❤user-defined marks

         ❤user-defined tags(“tag.first”,“tag.last”)

         ❤selection(SEL_FIRST,SEL_LAST)

         ❤window coordinate("@x,y")

         ❤embedded object name(window,images)

         ❤expressions

   下面逐个讲解:
   ❤ " line.column "
   由于我们的Text组件是支持多行文本的,所以我们现在从一个一维空间变成了二维空间,我们就可以用行和列来定位一个位置。
   行/列 是最基础的索引方式,它们将索引位置的行号和列号以字符串的形式表示出来(中间以 “.” 分隔,例如 “1.0”)。需要注意的是,行号以 1 开始,列号则以 0 开始。你还可以使用以下语法构建索引:

"%d.%d" % (line, column)

   指定超出现有文本的最后一行的行号,或超出一行中列数的列号都不会引发错误。对于这样的指定,Tkinter 解释为已有内容的末尾的下一个位置。   (解析:已有内容的末尾的下一个位置这句话的意思就是说,比如下面那个代码的截图,他只有第一行有数据,如果你定位的到3行0列,想在这插入,是不行的,他会自动指到第二行第0列,即已有内容的末尾下一行)

   需要注意的是,使用 行/列 的索引方式看起来像是浮点值。其实不只像而已,你在需要指定索引的时候使用浮点值代替也是可以的:   (解析:比如下面这个例子 "1.2"和1.6索引是一样的,"1.2"也可以直接写出1.2,可以省了两个字符串的麻烦)

from tkinter import *

root = Tk()
 
text = Text(root, width = 30, heigh = 3)
text.pack()
 
text.insert(INSERT, "I love dog")
print(text.get("1.2", 1.6))
 
root.mainloop()

在这里插入图片描述

   使用 index() 方法可以将所有其他(除了这个的其他10个)支持的“索引”格式统一转换为“行/列”格式的索引号。

   ❤ " line.end " :
   行号加上字符串 “.end” 的格式表示为该行最后一个字符的位置:   (解析:这个例子就是把1.2到1.end,即第一个行第2位置到第一行最后一个位置都打印出来)

text.insert(INSERT, "I love dog")
print(text.get("1.2", "1.end"))

在这里插入图片描述
   ❤ " insert " :
   对应插入光标的位置。

   ❤ " current " :
   对应与鼠标坐标最接近的位置。不过,如果你紧按鼠标任何一个按钮,它会直到你松开它才响应。

   ❤ " end " :
   对应 Text 组件的文本缓冲区最后一个字符的下一个位置。

   ❤ " user-defined marks " :
   user-defined marks 是对 Text 组件中位置的命名。“insert” 和 “current” 是两个预先命名好的 marks,除此之外你可以自定义 marks(请参考下方【Marks 用法】)。

   ❤ " User-defined tags " :
   User-defined tags 代表可以分配给 Text 组件的特殊事件绑定和风格(请参考下方【Tags 用法】)。

   你可以使用 “tag.first”(使用 tag 的文本的第一个字符之前)和 “tag.last”(使用 tag 的文本的最后一个字符之后)语法表示标签的范围。

"%s.first" % tagname
"%s.last" % tagname

   如果查无此 tag,那么 Tkinter 会抛出一个TclError 异常。

   ❤ " selection(SEL_FIRST,SEL_LAST) " :
   selection 是一个名为 SEL(或 “sel”)的特殊 tag,表示当前被选中的范围,你可以使用 SEL_FIRST 到 SEL_LAST 来表示这个范围。如果没有选中的内容,那么 Tkinter 会抛出一个TclError 异常。

   ❤ " window coordinate("@x,y") " :
   你还可以使用窗口坐标作为索引。例如在一个事件绑定中,你可以使用以下代码找到最接近鼠标位置的字符:

"@%d,%d" % (event.x, event.y)

   ❤ " embedded object name(window,images) " :
   embedded object name 用于指向在 Text 组件中嵌入的 window 和 image 对象。要引用一个 window,只要简单地将一个 Tkinter 组件实例作为索引即可。引用一个嵌入的 image,只需使用相应的 PhotoImage 和 BitmapImage 对象。

   ❤ " expressions " :
   expressions 用于修改任何格式的索引,用字符串的形式实现修改索引的表达式。

   

表达式

含义

"+ count chars" 1. 将索引向前(->)移动 count 个字符
2. 可以越过换行符,但不能超过 END 的位置
"- count chars" 1. 将索引向后(<-)移动 count 个字符
2. 可以越过换行符,但不能超过 "1.0" 的位置
"+ count lines" 1. 将索引向前(->)移动 count 行
2. 索引会尽量保持与移动前在同一列上,但如果移动后的那一行字符太少,将移动到该行的末尾
"- count lines" 1. 将索引向后(<-)移动 count 行
2. 索引会尽量保持与移动前在同一列上,但如果移动后的那一行字符太少,将移动到该行的末尾
" linestart" 1. 将索引移动到当前索引所在行的起始位置
2. 注意,使用该表达式前边必须有一个空格隔开
" lineend" 1. 将索引移动到当前索引所在行的末尾
2. 注意,使用该表达式前边必须有一个空格隔开
" wordstart" 1. 将索引移动到当前索引指向的单词的开头
2. 单词的定义是一系列字母、数字、下划线或任何非空白字符的组合
3. 注意,使用该表达式前边必须有一个空格隔开
" wordend" 1. 将索引移动到当前索引指向的单词的末尾
2. 单词的定义是一系列字母、数字、下划线或任何非空白字符的组合
3. 注意,使用该表达式前边必须有一个空格隔开

   TIPS:只要结果不产生歧义,关键字可以被缩写,空格也可以省略。例如:"+ 5 chars" 可以简写成 “+5c”

   在实现中,为了确保表达式为普通字符串,你可以使用 str 或格式化操作来创建一个表达式字符串。下边例子演示了如何删除插入光标前边的一个字符:

def backspace(event):
    event.widget.delete("%s-1c" % "insert", "insert")

   Marks用法:

   (解析:通俗的理解的就是看书时,碰到了重点,拿小本本来记录他在这边数的位置,如果再拿绿色或马克笔来画出来显眼一些这个就是tag标签)

   Marks(标记)通常是嵌入到 Text 组件文本中的不可见对象。事实上 Marks 是指定字符间的位置,并跟随相应的字符一起移动。Marks 有 “insert”,“current” 和 user-defined marks(用户自定义的 Marks)。其中,“insert” 和 “current” 是 Tkinter 预定义的特殊 Marks,它们不能够被删除。

   “insert” 用于指定当前插入光标的位置,Tkinter 会在该位置绘制一个闪烁的光标(因此并不是所有的 Marks 都不可见)。

    “current” 用于指定与鼠标坐标最接近的位置。不过,如果你紧按鼠标任何一个按钮,它会直到你松开它才响应。

   你还可以自定义任意数量的 Marks,Marks 的名字是由普通字符串组成,可以是除了空白字符外的任何字符(为了避免歧义,你应该起一个有意义的名字)。使用 mark_set() 方法创建和移动 Marks。

   如果你在一个 Mark 标记的位置之前插入或删除文本,那么 Mark 跟着一并移动。删除 Marks 你需要使用 mark_unset() 方法,删除 Mark 周围的文本并不会删除 Mark 本身。

   如果有做相关练习的,应该会被 Mark 的很多特性所疑惑,在准备这个内容的时候也很是迷惑,找了不知多少文档…最后总结为下边几个例子讲解:

   例1,Mark 事实上就是索引,用于表示位置:

from tkinter import *

root = Tk()
 
text = Text(root, width = 30, heigh = 5)
text.pack()
 
text.insert(INSERT, "I love Dog")
text.mark_set("here", "1.2")
text.insert("here", "插")

 
root.mainloop()

在这里插入图片描述
   (解析:首先这句:text.mark_set(“here”, “1.2”)用mark_set方法先设置了一个标记,这个标记的名字叫here,设置在1.2这个位置,也就是l的位置,下一条语句就是在做的标记here前边插入了一个插字)

   例2,如果 Mark 前边的内容发生改变,那么 Mark 的位置也会跟着移动(说白了就是 Mark 会“记住”它后边的那货~):

text.insert(INSERT, "I love Dog")
text.mark_set("here", "1.2")
text.insert("here", "插")
text.insert("here", "入")

在这里插入图片描述
   (解析:当在1.2的位置即l的位置插入“插”字时,"插"字就占领了1.2这个位置,而Mark是记住了l的位置,所以Mark就变成了1.3,当在插入"入"字,mark就在1.4即l的位置,就是这个mark一直会记住l)

   例3,如果 Mark 周围的文本被删除了,Mark 仍然还在噢(只是它后边的那货被删除了,所以它六神无主,只能初始化为 “1.0”):

from tkinter import *


root = Tk()
 
 
text = Text(root, width = 30, heigh = 5)
text.pack()
 
text.insert(INSERT, "I love Dog")
text.mark_set("here", "1.2")
text.insert("here", "插")


text.delete("1.0", "end")
text.insert("here", "入")

 
root.mainloop()

在这里插入图片描述
   (解析:可以看到先用text.delete(“1.0”, “end”)把第一行都删了,然后继续在here这个标记插入"入"字,结果"入"是在1.0的位置,因为被初始化到1.0位置了)

   例4,只有 mark_unset() 方法可以解除 Mark 的封印:   (解析:删除了还使用就会报tkinter.TcError的错)

text.insert(INSERT, "I love Dog")
text.mark_set("here", "1.2")
text.insert("here", "插")

text.mark_unset("here")

text.delete("1.0", "end")
text.insert("here", "入")

在这里插入图片描述
   好,讲最后一点,我们看到了,默认插入内容到 Mark,是插入到它的左侧(就是说插入一个字符的话,Mark 向后移动了一个字符的位置)。那能不能插入到 Mark 的右侧呢?其实是可以的,通过 mark_gravity() 方法就可以实现。   (解析:gravity就是重心,引力的意思,这里直观的解释就是这个Mark偏向于哪边,他的默认是RIGHT,表示右边,就是说你插入一个数据,那么Mark是在这个数据的右边)

   例5(对比例2):

from tkinter import *


root = Tk()
 
text = Text(root, width = 30, heigh = 5)
text.pack()
 
text.insert(INSERT, "I love Dog")

text.mark_set("here", "1.2")
text.mark_gravity("here", LEFT)


text.insert("here", "插")
text.insert("here", "入")
 
root.mainloop()

在这里插入图片描述
   (解析:那么这里改成LEFT后,刚开始Mark是在1.2的位置,然后我们偏向改为了左边,就是说插入的东西是在Mark的右边,Mark保持在插入东西的左边,那么Mark永远都是在这个1.2的位置,他不会发生改变,默认他是RIGHT,在他前面插入数据,那么他会跟随他后边的数据走,改成LEFT就不会)

   Tags 用法:

Tags(标签)通常用于改变 Text 组件中内容的样式和功能。你可以修改文本的字体、尺寸和颜色。另外,Tags 还允许你将文本、嵌入的组件(例如Button)和图片与键盘和鼠标等事件相关联。除了 user-defined tags(用户自定义的 Tags),还有一个预定义的特殊 Tag:SEL。   (与鼠标事件进行关联比如说,baidu.com是个域名,我们就可以关联鼠标操作,当鼠标上去的时候,会变成一个小手指,然后点击的时候,就会弹出百度首页)

SEL(或 “sel”)用于表示对应的选中内容(如果有的话)。

你可以自定义任意数量的 Tags,Tags 的名字是由普通字符串组成,可以是除了空白字符外的任何字符。另外,任何文本内容都支持多个 Tags 描述,任何 Tag 也可以用于描述多个不同的文本内容。

为指定文本添加 Tags 可以使用 tag_add() 方法::

from tkinter import *


root = Tk()

text = Text(root, width = 30, heigh = 5)
text.pack()

text.insert(INSERT,"I love Dogdog.com")


text.tag_add("tag1","1.7","1.12","1.14")
text.tag_config("tag1",background = "yellow",foreground = "red")

    
root.mainloop()

在这里插入图片描述
(解析:首先实例化好Text组件和插入相应内容后,然后用text对象的tag_add方法来添加一个标签,第一个参数就是标签的名字,之后的参数就是你的范围,例如说这里是1.7,第一行的第八列,因为列是从0开始的,就是D,然后到哪里就是接下去的参数,这里是1.12,第一行的13列,然后再来一个单独的,1.14就是第一行15列,到这里,他只是说在这个指定的位置标注了一个tag标签,但我们还没有对这个标签进行一个设置,可以通过tag_config这个方法来设置标签的样式,什么左对齐,右对齐,缩进都是可以调整的,这里就设置背景色和前景色,这里bg的缩写不是表示背景色,而是表示bgstipple,指定一个位图作为背景,并使用 background 选项指定的颜色填充,在其他组件bg都是background的缩写,知道就好)
如上,使用 tag_config() 方法可以设置 Tags 的样式。下边罗列了 tag_congif() 方法可以使用的选项:

选项 含义
background 1. 指定该 Tag 所描述的内容的背景颜色
2. 注意:bg 并不是该选项的缩写,在这里 bg 被解释为 bgstipple 选项的缩写
bgstipple 1. 指定一个位图作为背景,并使用 background 选项指定的颜色填充
2. 只有设置了 background 选项该选项才会生效
3. 默认的标准位图有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'
borderwidth 1. 指定文本框的宽度
2. 默认值是 0
3. 只有设置了 relief 选项该选项才会生效
4. 注意:该选项不能使用 bd 缩写
fgstipple 1. 指定一个位图作为前景色
2. 默认的标准位图有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'
font 指定该 Tag 所描述的内容使用的字体
foreground 1. 指定该 Tag 所描述的内容的前景色
2. 注意:fg 并不是该选项的缩写,在这里 fg 被解释为 fgstipple 选项的缩写
justify 1. 控制文本的对齐方式
2. 默认是 "left"(左对齐),还可以选择 "right"(右对齐)和 "center"(居中)
3. 注意:需要将 Tag 指向该行的第一个字符,该选项才能生效
lmargin1 1. 设置 Tag 指向的文本块第一行的缩进
2. 默认值是 0
3. 注意:需要将 Tag 指向该文本块的第一个字符或整个文本块,该选项才能生效
lmargin2 1. 设置 Tag 指向的文本块除了第一行其他行的缩进
2. 默认值是 0
3. 注意:需要将 Tag 指向整个文本块,该选项才能生效
offset

1. 设置 Tag 指向的文本相对于基线的偏移距离

2. 可以控制文本相对于基线是升高(正数值)或者降低(负数值)
3. 默认值是 0
overstrike 1. 在 Tag 指定的文本范围画一条删除线
2. 默认值是 False
relief 1. 指定 Tag 对应范围的文本的边框样式
2. 可以使用的值有:"sunken", "raised", "groove", "rifge" 或 "flat"
3. 默认值是 "flat"(没有边框)
rmargin 1. 设置 Tag 指向的文本块右侧的缩进
2. 默认值是 0
spacing1 1. 设置 Tag 所描述的文本块中每一行与上方的空白间隔
2. 注意:自动换行不算
3. 默认值是 0
spacing2 1. 设置 Tag 所描述的文本块中自动换行的各行间的空白间隔
2. 注意:换行符('\n')不算
3. 默认值是 0
spacing3 1. 设置 Tag 所描述的文本块中每一行与下方的空白间隔
2. 注意:自动换行不算
3. 默认值是 0
tabs 1. 定制 Tag 所描述的文本块中 Tab 按键的功能
2. 默认 Tab 被定义为 8 个字符的宽度
3. 你还可以定义多个制表位:tabs=('3c', '5c', '12c') 表示前 3 个 Tab 宽度分别为 3厘米,5厘米,12厘米,接着的 Tab 按照最后两个的差值计算,即:19厘米,26厘米,33厘米
4. 你应该注意到了,它上边 'c' 的含义是“厘米”而不是“字符”,还可以选择的单位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大约是 '1i' 等于 '72p')
5. 如果是一个整型值,则单位是像素
underline 1. 该选项设置为 True 的话,则 Tag 所描述的范围内文本将被画上下划线
2. 默认值是 False
wrap 1. 设置当一行文本的长度超过 width 选项设置的宽度时,是否自动换行
2. 该选项的值可以是:"none"(不自动换行),"char"(默认)(按字符自动换行)和 "word"(按单词自动换行)

还有一点需要注意的是:如果你对同一个范围内的文本加上多个 Tags,并且设置相同的选项,那么新创建的 Tag 样式会覆盖比较旧的 Tag:(事实上,对同一个文本创建tag,他会形成一个tag的栈,一个栈的数据结构,那么他新进去的就会覆盖旧的)

from tkinter import *


root = Tk()

text = Text(root, width = 30, heigh = 5)
text.pack()

text.insert(INSERT,"I love Dogdog.com")


text.tag_add("tag1","1.7","1.12","1.14")
text.tag_add("tag2","1.7","1.12","1.14")
text.tag_config("tag1",background = "yellow",foreground = "red")#旧的Tag
text.tag_config("tag2",foreground = "white",) #新的Tag

# 那么新创建的 Tag2 会覆盖比较旧的 Tag1 的相同选项
    
root.mainloop()

在这里插入图片描述
(解析:如上,新创建的tag2,只设置了前景色为白色,然后把这个tag2标签放到了和tag1标签一样的位置,指定同一段文本,通过结果截图可以看到,tag2白色的前景色覆盖了tag1红色的前景色,因为旧的创建在栈低,新的在栈顶,所以直接用新的了,然后可以发现,背景颜色没有发生改变,因为这里没有覆盖到他的背景色,所以依旧用tag1的背景颜色)

你或许想控制 Tags 间的优先级,这可以实现吗?完全没有问题!你可以使用 tag_raise()tag_lower() 方法来提高和降低某个 Tag 的优先级。

from tkinter import *


root = Tk()

text = Text(root, width = 30, heigh = 5)
text.pack()

text.tag_config("tag1", background="yellow", foreground="red")
text.tag_config("tag2", foreground="white")

#降低tag2的优先级 
text.tag_lower("tag2")

# 注意,与下边的调用顺序没有关系
text.insert(INSERT, "I love Dogdog.com", ("tag2", "tag1"))

root.mainloop()

在这里插入图片描述

另外 Tags 还支持事件绑定,使用的是 tag_bind() 的方法。

下边例子中我们将文本(“baidu.com”)与鼠标事件进行绑定,当鼠标进入该文本段的时候,鼠标样式切换为 “arrow” 形态(小手的样子),离开文本段的时候切换回 “xterm” 形态。当触发鼠标“左键点击操作”事件的时候,使用默认浏览器打开百度的首页(https://www.baidu.com):

from tkinter import *
import webbrowser


root = Tk()

text = Text(root,width = 30,height = 5)
text.pack()



text.insert(INSERT,"I love baidu.com")


text.tag_add("link","1.7","1.16")
text.tag_config("link",foreground = "blue",underline = True)

def show_arrow_cursor(event):
    text.config(cursor="hand2") #arrow

def show_xterm_cursor(event):
    text.config(cursor = "xterm")

def click(event):
    webbrowser.open("https://www.baidu.com")
    

text.tag_bind("link","<Enter>",show_arrow_cursor)
text.tag_bind("link","<Leave>",show_xterm_cursor)
text.tag_bind("link","<Button-1>",click)


root.mainloop()

在这里插入图片描述
在这里插入图片描述
   (解析:首先给文本中的域名加上标签text.tag_add(“link”,“1.7”,“1.16”)同时设置背景色为蓝色text.tag_config(“link”,foreground = “blue”,underline = True),然后这里超链接加个下划线比较好看,所以再加上那个underline选项,他是布尔类型的值,给个True就会显示下划线了

   接下来来做一个事件绑定,事件绑定的知识在后边的章节会有讲解,这里先来熟悉一下,绑定事件使用的是tag_bind方法,text.tag_bind(“link”,"<Enter>",show_arrow_cursor),这里第一个参数就是绑定的是link这个标签,而这个标签又是标记那个域名的,第二个参数表示当鼠标进入的时候,即事件,然后第三个参数在写个command回调函数,当鼠标进入的时候就调用这个函数,函数名可以自己定,但最好有意义,在这个函数函数里, text.config(cursor=“hand2”) ,事实上就是设置cursor他的鼠标(各个组件都有设置他的cursor这么一个选项)设置为hand2,就是变成小手的样子

   接着在写一个绑定事件text.tag_bind(“link”,"<Leave>",show_xterm_cursor),就是当鼠标离开这个链接的的时候,鼠标就变成大写字母I的亚子,接着还需要单击事件,ext.tag_bind(“link”,"<Button-1>",click),就是点击了超链接部分就会跳转到百度首页面,那三个回调函数都需要一个event参数,

   然后跳转打开网页需要一个webbrowser模块,所以需要导入,webbrowse主要是一个用于打开网页的一个成熟的模块,我们直接使用这个默认的模块就可以了,同样是open方法,然后参数就是要打开的网址)

##参数

Text(master=None, **options) (class)

master – 父组件

**options – 组件选项,下方表格详细列举了各个选项的具体含义和用法:

选项 含义
autoseparators 1. 指定实现“撤销”操作的时候是否自动插入一个“分隔符”(用于分隔操作记录)
2. 默认值是 True
3. 详见上方用法【“撤销”和“恢复”操作】
background 1. 设置 Text 组件的背景颜色
2. 注意:通过使用 Tags 可以使 Text 组件中的文本支持多种背景颜色显示(请参考上方【Tags 用法】)
bg 跟 background 一样
borderwidth 1. 设置 Entry 的边框宽度
2. 默认值是 1 像素
bd 跟 borderwidth 一样
cursor 1. 指定当鼠标在 Text 组件上飘过的时候的鼠标样式
2. 默认值由系统指定
exportselection 1. 指定选中的文本是否可以被复制到剪贴板
2. 默认值是 True
3. 可以修改为 False 表示不允许复制文本
font 1. 设置 Text 组件中文本的默认字体
2. 注意:通过使用 Tags 可以使 Text 组件中的文本支持多种字体显示(请参考上方【Tags 用法】)
foreground 1. 设置 Text 组件中文本的颜色
2. 注意:通过使用 Tags 可以使 Text 组件中的文本支持多种颜色显示(请参考上方【Tags 用法】)
fg 跟 foreground 一样
height 1. 设置 Text 组件的高度
2. 注意:单位是行数,不是像素噢
highlightbackground 1. 指定当 Text 组件没有获得焦点的时候高亮边框的颜色
2. 默认值由系统指定
highlightcolor 1. 指定当 Text 组件获得焦点的时候高亮边框的颜色
2. 默认值由系统指定
highlightthickness 1. 指定高亮边框的宽度
2. 默认值是 0
insertbackground 1. 设置插入光标的颜色
2. 默认是 BLACK(或 "black")
insertborderwidth 1. 设置插入光标的边框宽度
2. 默认值是 0
3. 提示:你得设置 insertwidth 选项为比较大的数值才能看出来噢
insertofftime 1. 该选项控制光标的闪烁频率(灭)
2. 单位是毫秒
insertontime 1. 该选项控制光标的闪烁频率(亮)
2. 单位是毫秒
insertwidth 1. 指定光标的宽度
2. 默认值是 2 像素
maxundo 1. 设置允许“撤销”操作的最大次数
2. 默认值是 0
3. 设置为 -1 表示不限制
padx 1. 指定水平方向上的额外间距(内容和边框间)
2. 默认值是 1
pady 1. 指定垂直方向上的额外间距(内容和边框间)
2. 默认值是 1
relief 1. 指定边框样式
2. 默认值是 "sunken"
3. 其他可以选择的值是 "flat","raised","groove" 和 "ridge"
selectbackground 1. 指定被选中文本的背景颜色
2. 默认值由系统指定
selectborderwidth 1. 指定被选中文本的边框宽度
2. 默认值是 0
selectforeground 1. 指定被选中文本的字体颜色
2. 默认值由系统指定
setgrid 1. 指定一个布尔类型的值,确定是否启用网格控制
2. 默认值是 False
spacing1 1. 指定 Text 组件的文本块中每一行与上方的空白间隔
2. 注意:自动换行不算
3. 默认值是 0
spacing2 1. 指定 Text 组件的文本块中自动换行的各行间的空白间隔
2. 注意:换行符('\n')不算
3. 默认值是 0
spacing3 1. 指定 Text 组件的文本中每一行与下方的空白间隔
2. 注意:自动换行不算
3. 默认值是 0
state 1. 默认情况下 Text 组件响应键盘和鼠标事件("normal")
2. 如果将该选项的值设置为 "disabled",那么上述响应就不会发生,并且你无法修改里边的内容
tabs 1. 定制 Tag 所描述的文本块中 Tab 按键的功能
2. 默认 Tab 被定义为 8 个字符的宽度
3. 你还可以定义多个制表位:tabs=('3c', '5c', '12c') 表示前 3 个 Tab 宽度分别为 3厘米,5厘米,12厘米,接着的 Tab 按照最后两个的差值计算,即:19厘米,26厘米,33厘米
4. 你应该注意到了,它上边 'c' 的含义是“厘米”而不是“字符”,还可以选择的单位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大约是 '1i' 等于 '72p')
5. 如果是一个整型值,则单位是像素
takefocus 1. 指定使用 Tab 键可以将焦点移动到 Text 组件中
2. 默认是开启的,可以将该选项设置为 False 避免焦点在此 Text 组件中
undo 1. 该选项设置为 True 开启“撤销”功能
2. 该选项设置为 False 关闭“撤销”功能
3. 默认值是 False
width 1. 设置 Text 组件的宽度
2. 注意:单位是字符数,因此 Text 组件的实际宽度还取决于字体的大小
wrap 1. 设置当一行文本的长度超过 width 选项设置的宽度时,是否自动换行
2. 该选项的值可以是:"none"(不自动换行),"char"(按字符自动换行)和 "word"(按单词自动换行)
xscrollcommand 1. 与 scrollbar(滚动条)组件相关联(水平方向)
2. 使用方法可以参考:Scrollbar 组件
yscrollcommand 1. 与 scrollbar(滚动条)组件相关联(垂直方向)
2. 使用方法可以参考:Scrollbar 组件

##方法

bbox(index)
— 返回给定索引指定的字符的边界框
— 返回值是一个 4 元组:(x, y, width, height)
— 如果该字符是不可见的,那么返回 None
— 注意:只有当 Text 组件被更新的时候该方法才有效,可以使用 update_idletasks() 方法先更新 Text 组件

compare(index1, op, index2)
— 返回对比 index1 和 index2 指定的两个字符的结果
— op 是操作符:’<’, ‘<=’, ‘==’, ‘>=’, ‘>’ 或 ‘!=’(不支持 Python 的 ‘<>’ 操作符)
— 返回布尔类型的值表示对比的结果

debug(boolean=None)
— 开启或关闭 Debug 状态

delete(start, end=None)
— 删除给定范围的文本或嵌入对象
— 如果在给定范围内有任何 Marks 标记的位置,则将 Marks 移动到 start 参数开始的位置

dlineinfo(index)
— 返回给定索引指定的字符所在行的边界框
— 返回值是一个 5 元组:(x, y, width, height, offset),offset 表示从该行的顶端到基线的偏移
— 如果该行不可见,则返回 None
— 注意:只有当 Text 组件被更新的时候该方法才有效,可以使用 update_idletasks() 方法先更新 Text 组件

dump(index1, index2=None, command=None, **kw)
— 返回 index1 和 index2 之间的内容
— 返回的值是一个由 3 元组(关键词,值,索引)组成的列表,关键词参数的顺序为:all, image, mark, tag, text, window
— 默认关键词是 ‘all’,表示全部关键词均为选中状态
— 如果需要筛选个别关键词,可以用 dump(index1, index2, image=True, text=True) 这样的形式调用
— 如果指定了 command 函数,那么会为列表中的每一个三元组作为参数调用一次该函数(这种情况下,dump() 不返回值)

edit_modified(arg=None)
— 该方法用于查询和设置 modified 标志(该标标志用于追踪 Text 组件的内容是否发生变化)
— 如果不指定 arg 参数,那么返回 modified 标志是否被设置
— 你可以传递显式地使用 True 或 False 作为参数来设置或清除 modified 标志
— 任何代码或用户的插入或删除文本操作,“撤销”或“恢复”操作,都会是的 modified 标志被设置

edit_redo(self)
— “恢复”上一次的“撤销”操作
— 如果 undo 选项为 False,该方法无效
— 详见上方用法【“撤销”和“恢复”操作】

edit_reset()
— 清空存放操作记录的栈

edit_separator()
— 插入一个“分隔符”到存放操作记录的栈中,用于表示已经完成一次完整的操作
— 如果 undo 选项为 False,该方法无效
— 详见上方用法【“撤销”和“恢复”操作】

edit_undo()
— 撤销最近一次操作
— 如果 undo 选项为 False,该方法无效
— 详见上方用法【“撤销”和“恢复”操作】

get(index1, index2=None)
— 返回 index1 到 index2(不包含)之间的文本
— 如果 index2 参数忽略,则返回一个字符
— 如果包含 image 和 window 的嵌入对象,均被忽略
— 如果包含有多行文本,那么自动插入换行符(’\n’)

image_cget(index, option)
— 返回 index 参数指定的嵌入 image 对象的 option 选项的值
— 如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常

image_configure(index, **options)
— 修改 index 参数指定的嵌入 image 对象的一个或多个 option 选项的值
— 如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常

image_create(index, cnf={}, **kw)
— 在 index 参数指定的位置嵌入一个 image 对象
— 该 image 对象必须是 Tkinter 的 PhotoImage 或 BitmapImage 实例
— 可选选项 align:设定此图像的垂直对齐,可以是 “top”、“center”、“bottom” 或 “baseline”
— 可选选项 image:PhotoImage 或 BitmapImage 对象
— 可选选项 name:你可以为该图像实例命名,如果你忽略此选项,那么 Tkinter 会自动为其取一个独一无二的名字。
— 可选选项 padx:设置水平方向上的额外间距
— 可选选项 pady:设置垂直方向上的额外间距

image_names()
— 返回 Text 组件中嵌入的所有 image 对象的名字

index(index)
— 将 index 参数指定的位置以 “line.column” 的索引形式返回
— index 参数支持任何格式的索引

insert(index, text, *tags)
— 在 index 参数指定的位置插入字符串
— 可选参数 tags 用于指定文本的样式
— 详见上方【Tags 用法】

mark_gravity(self, markName, direction=None)
— 设置 Mark 的方向,可以是 “left” 或 “right”(默认是 “right”,即如果在 Mark 处插入文本的话,Mark 将发生相应的移动以保持在插入文本的右侧)
— 如果设置为 “left”,那么在 Mark 处插入文本并不会移动 Mark(因为 Mark 在插入文本的左侧)
— 如果忽略 direction 参数,则返回指定 Mark 的方向
— 详见上方【Marks 用法】

mark_names()
— 返回 Text 组件中所有 Marks 的名字
— 包括两个特殊 Mark:“insert” 和 “current”
— 注意:“end” 是特殊的索引,不是 Mark

mark_next(index)
— 返回在 index 指定的位置后边的一个 Mark 的名字
— 如果不存在则返回空字符串

mark_previous(index)
— 返回在 index 指定的位置前边的一个 Mark 的名字
— 如果不存在则返回空字符串

mark_set(markName, index)
— 移动 Mark 到 index 参数指定的位置
— 如果 markName 参数指定的 Mark 不存在,则创建一个新的 Mark

mark_unset(*markNames)
— 删除 markNames 指定的 Marks
— 不能删除预定义的 “insert” 和 “current”

replace(index1, index2, chars, *args)
— 将 index1 到 index2 之间的内容替换为 chars 参数指定的字符串
— 如果需要为替换的内容添加 Tag,可以在 args 参数指定 Tag
— 详见上方【Tags 用法】

scan_dragto(x, y)
— 详见下方 scan_mark(x, y)

scan_mark(x, y)
— 使用这种方式来实现 Text 组件内容的滚动
— 需要将鼠标按钮事件以及鼠标当前位置绑定到 scan_mark(x, y) 方法,然后将 事件及当前鼠标位置绑定到 scan_dragto(x, y) 方法,就可以实现 Text 组件的内容在当前位置和 scan_mark(x, y) 指定的位置 (x, y) 之间滚动

search(pattern, index, stopindex=None, forwards=None, backwards=None, exact=None, regexp=None, nocase=None, count=None)
— 从 index 开始搜索 pattern,到 stopindex 结束(不指定表示搜索到末尾)
— 如果成功找到,以 “line.column” 返回第一个匹配的字符;否则返回空字符串
— forwards 参数设置为 True 表示向前(->)搜索
— backwards 参数设置为 True 表示向后(<-)搜索
— exact 参数设置为 True 表示搜索与 pattern 完全匹配的结果
— regexp 参数设置为 True,则 pattern 被解释为 Tcl 格式的正则表达式
— nocase 参数设置为 True 是忽略大小写,默认是区分大小写的搜索
—count 参数指定为一个 IntVar 的 Tkinter 变量,用于存放当找到匹配的字符个数(如果匹配结果中没有嵌入的 image 或 window 对象的话,一般该值等于 pattern 的字符个数)

see(index)
— 滚动内容,确保 index 指定的位置可见

tag_add(tagName, index1, index2=None)
— 为 index1 到 index2 之间的内容添加一个 Tag(tagName 参数指定)
— 如果 index2 参数忽略,则单独为 index1 指定的内容添加 Tag
— 详见上方【Tags 用法】

tag_bind(tagName, sequence, func, add=None)
— 为 Tag 绑定事件
— 详见上方【Tags 用法】

tag_cget(tagName, option)
— 返回 tagName 指定的 option 选项的值

tag_config(tagName, cnf=None, **kw)
— 跟 tag_configure(tagName, cnf=None, **kw) 一样

tag_configure(tagName, cnf=None, **kw)
– 设置 tagName 的选项
– 详见上方【Tags 用法】

tag_delete(*tagNames)
— 删除 tagNames 指定的 Tags

tag_lower(tagName, belowThis=None)
— 降低 Tag 的优先级
— 如果 belowThis 参数不为空,则表示 tagName 需要比 belowThis 指定的 Tag 优先级更低
— 详见上方【Tags 用法】

tag_names(index=None)
— 如果不带参数,表示返回 Text 组件中所有 Tags 的名字
— index 参数表示返回该位置上所有的 Tags 的名字

tag_nextrange(tagName, index1, index2=None)
— 在 index1 到 index2 的范围内第一个 tagName 的位置
— 如果没有则返回空字符串

tag_prevrange(tagName, index1, index2=None)
— tag_nextrange() 的反向查找,也就是查找范围是 index2 到 index1

tag_raise(tagName, aboveThis=None)
— 提高 Tag 的优先级
— 如果 aboveThis 参数不为空,则表示 tagName 需要比 aboveThis 指定的 Tag 优先级更高
— 详见上方【Tags 用法】

tag_ranges(tagName)
— 返回所有 tagName 指定的文本,并将它们的范围以列表的形式返回

tag_remove(tagName, index1, index2=None)
— 删除 index1 到 index2 之间所有的 tagName
— 如果忽略 index2 参数,那么只删除 index1 指定的那个字符的 tagName(如果有的话)

tag_unbind(tagName, sequence, funcid=None)
— 解除与 tagName 绑定的事件(sequence 指定)

window_cget(index, option)
— 返回 index 参数指定的嵌入 window 对象的 option 选项的值
— 如果给定的位置没有嵌入 window 对象,则抛出 TclError 异常

window_config(index, cnf=None, **kw)
— 跟 window_configure(index, cnf=None, **kw) 一样

window_configure(index, cnf=None, **kw)
— 修改 index 参数指定的嵌入 window 对象的一个或多个 option 选项的值
— 如果给定的位置没有嵌入 window 对象,则抛出 TclError 异常

window_create(index, **options)
— 在 index 参数指定的位置嵌入一个 window 对象
— 支持两种方式在 Text 组件中嵌入 window 对象:请看下方 create 选项和 window 选项的描述
— 可选选项 align:设定此图像的垂直对齐,可以是 “top”、“center”、“bottom” 或 “baseline”
— 可选选项 create:指定一个回调函数用于创建嵌入的 window 组件,该函数没有参数,并且必须创建 Text 的子组件并返回
— 可选选项 padx:设置水平方向上的额外间距
— 可选选项 pady:设置垂直方向上的额外间距
— 可选选项 stretch:该选项控制当行的高度大于嵌入组件的高度时,嵌入组件是否延伸。默认值是 False,表示组件保持原形;设置为 True 表示将该组件垂直部分延伸至行的高度
— 可选选项 window:指定一个已经创建好的 window 组件,该组件必须是 Text 组件的子组件

window_names()
— 返回 Text 组件中嵌入的所有 window 对象的名字

xview(*args)
— 该方法用于在水平方向上滚动 Text 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现(具体操作参考:Scrollbar)
— 如果第一个参数是 “moveto”,则第二个参数表示滚动到指定的位置:0.0 表示最左端,1.0 表示最右端
— 如果第一个参数是 “scroll”,则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 “units” 或 “pages”),例如:xview(“scroll”, 3, “units”) 表示向右滚动三行

xview_moveto(fraction)
— 跟 xview(“moveto”, fraction) 一样

xview_scroll(number, what)
— 跟 xview(“scroll”, number, what) 一样

yview(*args)
— 该方法用于在垂直方向上滚动 Text 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现(具体操作参考:Scrollbar)
— 如果第一个参数是 “moveto”,则第二个参数表示滚动到指定的位置:0.0 表示最顶端,1.0 表示最底端
— 如果第一个参数是 “scroll”,则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 “units” 或 “pages”),例如:yview(“scroll”, 3, “pages”) 表示向下滚动三页

yview_moveto(fraction)
— 跟 yview(“moveto”, fraction) 一样

yview_scroll(number, what)
— 跟 yview(“scroll”, number, what) 一样


下一篇:Python —(十一)Tkinter窗口组件:Canvas

发布了247 篇原创文章 · 获赞 116 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/w15977858408/article/details/104173780
今日推荐