鱼c笔记——Python 的 GUI 编程(六):Tkinter 的 Text 组件

本文详细介绍了Tkinter的Text组件,包括其简单用法、插入图片和组件、Indexs索引的概念及类型、Marks的用法以及Tags的设置和事件绑定。Text组件不仅用于多行文本显示,还可作为文本处理器和简单的编辑器。通过Marks和Tags,可以实现文本位置的精确控制和样式设置,同时支持与用户交互的事件绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绘制单行文本使用 Label 组件、多行选项使用 Listbox 组件、输入框使用 Entry 组件

显示和处理多行文本就需要使用我们的 Text 组件了。

 

Text 组件十分的强大和灵活,适用于多种任务。虽然说 Text 的主要目的是显示多行文本,但是也常常被当做简单的文本处理器、文本编辑器或者网页浏览器来使用。例如说我们的 IDLE 就是 Text 组件构成的。

目录

简单用法

插入图片和组件

插入按钮

插入图片

Indexs索引

line.column

line.end

INSERT

CURRENT

END(或"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

Marks用法

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

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

例三,如果Marks周围的文本被删除了,Marks任然还在(只是它后面的那货被删除了,所以它六神无主,只能初始化为"1.0"):

例四,只有mark_unset()方法可以解除对Marks的封印:

Tags用法

设置样式

设置Tag优先级

事件绑定


 

简单用法

下面来演示一下 Text 组件的用法:

from tkinter import *

root = Tk()

text = Text(root, width=30, height=2) #30的意思是30个平均字符的宽度,height设置为两行
text.pack()

text.insert(INSERT, 'I Love\n')  #INSERT表示输入光标所在的位置,初始化后的输入光标默认在左上角
text.insert(END, 'Study!')

mainloop()
#生成好的Text组件可以进行编辑(并不是只读形式的)

 

插入图片和组件

Text 组件不仅支持编辑和插入文本,还支持插入图片和组件。

插入按钮

from tkinter import *

root = Tk()

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

text.insert(INSERT, 'I Love\n')
text.insert(END, 'Study!')

def show():
    print('呦西,我被点了一下')

b1 = Button(text, text='点我', command=show) #注意放入的是Text而不是root了
text.window_create(INSERT, window=b1)

mainloop()

 

插入图片

from tkinter import *

root = Tk()

text = Text(root, width=50, height=40)
text.pack()

photo = PhotoImage(file="D:\LOTUS专用图像\study.gif")  #只支持GIF格式的

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

b1 = Button(text, text='点我', command=show) #注意放入的是Text而不是root了
text.window_create(INSERT, window=b1)

mainloop()

 

Indexs索引

至于想要在 Text 组件中定位,就要使用到Indexs索引了。

Indexs(索引是用来指向 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 解释为已有内容的末尾的下一个位置。

 

需要注意的是,使用行列的索引方式看起来像是浮点值。其实不只是像而已,你在需要指定索引的时候使用浮点值代替也是可以的:

text.insert(INSERT, 'I LOVE STUDY')
print(text.get('1.2', 1.6))  #1.2  1.6可以不加双引号

使用 index() 方法可以将所有支持的“索引”格式(上面写的那一大堆,11 个)转化为“行/列”格式的索引号

 

line.end

行号加上字符串 ".end" 的格式表示为该行最后一个字符的位置

text.insert(INSERT, 'I LOVE STUDY')
print(text.get('1.2', '1.end'))  # end 为小写
#从第一行第三列到第一行最后

 

INSERT

INSERT 和下面两个有点类似 C 的宏定义

INSERT (或 "insert" )

对应插入光标的位置

 

CURRENT

CURRENT (或 "current" )  --用的少

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

 

END(或"end")

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

 

user-defined marks

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值