Tkinter (19) 文本部件 Text
文本部件的创建及其选项
部件主要作为处理多行字符串, 更可作为文本编辑器, 可以混合不同字体, 颜色, 图片(图片被视为单一字符处理), 也可以在文本部件中嵌入其他的部件, 该部件也被视为单一的字符.
text = tk.Text(parent, option, ...)
选项 | 说明 |
---|---|
autoseparators | undo=True 时, 是否在每次插入或删除后自动将分隔符添加到 undo 堆栈 |
bg or background | 预设背景色 |
bd or borderwidth | 外框的寛度, 内定为 2 点素 |
cursor | 当鼠标移到部件处时,所显示的鼠标图示 |
exportselection | 文本可否复制到剪贴板 0/1 |
font | 预设文本字体 |
fg or foreground | 预设文本及点阵图的颜色 |
height | 根据 font 选项的行数 |
highlightbackground | 非聚焦时的聚焦颜色 |
highlightcolor | 聚焦时的聚焦颜色 |
highlightthickness | 聚焦厚度,内定 1, 0 则无 |
insertbackground | 插入光标的背景颜色,内定为黑色 |
insertborderwidth | 插入光标外框寛度,内定为 0 |
insertofftime | 插入光标消失的时间,内定为 300 ms |
insertontime | 插入光标显现的时间,内定为 600 ms |
insertwidth | 插入光标寛度,内定为 2 点素 |
maxundo | 设置 undo 堆栈的最大保留次数, -1 为不限次数 |
padx | 水平间距,内定为 1 点素 |
pady | 垂直间距,内定为 1 点素 |
relief | 外框花样,内定为 SUNKEN |
selectbackground | 被选择文本的背景颜色 |
selectborderwidth | 被选择文本的外框寛度 |
selectforeground | 被选择文本的前景颜色 |
spacing1 | 段落前距, 内定 0 点素 |
spacing2 | 段落中距, 内定 0 点素 |
spacing3 | 段落后距, 内定 0 点素 |
state | NORMAL 或 DISABLED |
tabs | 定位符位置 |
takefocus | TAB 键在部件是否会循环焦点 0/1 |
undo | 是否可以 undo |
width | 部件的寛度 (标准字寛) |
wrap | 换行的方法, 内定为 CHAR, WORD, NONE |
xscrollcommand | 水平滚动条 scrollbar.set () 方法 |
yscrollcommand | 垂直滚动条 scrollbar.set () 方法 |
文本部件的索引方式
索引 index 指连续两个字符中间的位置, 以字符串代表值.
选项 | 说明 |
---|---|
line.column | 字符串, 第line行 (从 1 开始), 第column位置 (从 0 开始) |
line.end | 字符串, 第 line 行最后处 |
tk.INSERT | 插入光标位置, 同 ‘insert’ |
tk.CURRENT | 最近鼠标位置, 同 ‘current’ |
tk.END | 文本最后的位置, 同 ‘end’ |
tk.SEL_FIRST | 选择区的起点, 同 ‘sel.first’ |
tk.SEL_LAST | 选择区的终点, 同 ‘sel.last’ |
markname | 字符串, 使用标记名的标记的位置 |
tag.first | 字符串, 标签的起点 |
tag.last | 字符串, 标签的终点 |
@x,y | 字符串, 最接近座标位置 (x, y) 的字符前 |
embedded-object | 内嵌部件前 |
注: 以下内容可以加入以上索引, 取得更复杂的索引方式, 空格可省略, 可跨行.
选项 | 说明 |
---|---|
+ n chars(c) | 向后 n 个字符 |
- n chars(c) | 向前 n 个字符 |
+ n lines(l) | 向上 n 行, 如果长度不够, 会在行尾 |
- n lines(l) | 向下 n 行, 如果长度不够, 会在行尾 |
linestart | 行前 |
lineend | 行后 |
wordstart | 索引所在的字前 |
文本部件的标记 (mark)
标记为一不含句点及空格的字符串, 用来代表一个索引值, 比如 tk.INSERT, tk.CURRENT. 如果内文修改不影响标记相邻部份, 标记的位置不会改变.
标记有个定位方式 Gravity, 可以是 tk.LEFT 或 tk.RIGHT, 在标记处插入新字符串时, 前者标记保留在左侧, 后者则标记保留在右侧.
删除含有标记的字符串, 不会删除标记.
文本部件的标签 (tag)
标签tag 用来代表具有某些相同选项(如字体, 颜色, 事件等) 项目不含句点及空格的字符串, 用来代表某一群具有某些同样选项的项目, 比如tk.SEL 代表被选择的文本项目.
每个项目可以对应多个标签, 同样标签也可以对应多个项目, 如果不同的标签对应到同一个项目, 其选项的设置不同, 因为标签是以堆栈方式来管理, 因此以后设的标签选项而定.
文本部件的定位符
内定的定位符位置是8 个字符, 自定例如tabs=(‘3c’, ‘5c’, ‘12c’), 后面的所有定位符位置将是同距于定位符间的最后一个距离(12c - 5c = 7c)
内定的定位方式是左边对齐tk.LEFT, 也是可是tk.RIGHT, tk.CENTER, tk.NUMERIC (小数点对齐), 例如tabs=(‘3c’, ‘5c’, tk.RIGHT, ‘12c’, tk.CENTER)
文本部件的方法
方法 | 说明 |
---|---|
bbox(index) | 取得输入区字符串索引index 所在的字符,左上角的座标(x, y), 寛度/ 高度w/h, 返回(x, y, w, h), 如果没有字则返回None, 如果未更新update_idletasks(), 可能不会取得准确的资讯 |
compare(index1, op, index2) | 比较两个索引的位置, op 为 ‘<’, ‘<=’, ‘==’, ‘!=’, ‘>=’, or ‘>’ |
delete(index1, index2=None) | 删除索引 index1 处的字符, 或 index1 处到 index2 处前的字符串 |
dlineinfo(index) | 取得索引index 所在的行,左上角的座标(x, y), 寛度/ 高度w/h, 返回(x, y, w, h), 如果没有字则返回None,如果未更新update_idletasks(), 可能不会取得准确的资讯 |
edit_modified(arg=None) | 无参数返回, True 设置, False 清除文本修改的旗标, 旗标以部件内容有无修改为准 |
edit_redo() | 执行 redo |
edit_reset() | 清除 undo 堆栈 |
edit_separator() | 放一个 seperator 进堆栈, 用来界定下一个 undo 的还原步骤范围 |
edit_undo() | 执行 undo (所有上回放入 seperator 后的改变, 如果没有 seperator, 则 undo 全部), 空的 undo 堆栈会引起错误 |
image_create(index[, option=value, …]) | 在索引的地方插入图片, 选项有 align 垂直对齐位置top/center/bottom/baseline (文本的底线) image 图片< br>name 图片的名称, 没有设置会产生为#number padx 左右间隔 pady 上下间隔 |
get(index1, index2=None) | 返回索引index1 处的字符, 或index1 处到index2 处前的字符串, 其中的图片及部件都会被省略, 只返回文本部份, 多行以’\n’来表示 |
image_cget(index, option) | 返回索引所指图片的某选项值 |
image_configure(index, option, …) | 设置索引所指图片的各选项值, 无选项则返回选项值的字典 |
image_names() | 返回文本部件中所有图片的名称 tuple |
index(i) | 返回相关位置的索引值’line.char’, 参数有END (行末), INSERT (插入点), ANCHOR, SEL_FIRST (前选择点), SEL_LAST (后选择点), “@x ”(近x 处) |
insert(index, text, *tags) | 在索引处插入字符串, 加入 tags 标签中, 在插入处前后文本的标签都会被忽略; 如果没有给标签, 则会被加上去 |
mark_gravity(mark, gravity=None) | 设置或返回一个标记 mark 的定位方式 gravity, tk.LEFT 或 tk.RIGHT |
mark_names() | 返回文本部件中所有的标记名称, 包含 tk.INSERT 及 tk.CURRENT |
mark_next(index) | 返回索引处后的标记名称, 无则返回空符; 如果索引是一个数值, 返回的是在该位置的第一个标记, 如是索引是一个标记, 则返回下一个标记,该标记可能会是在同一个数值位置 |
mark_previous(index) | 返回索引处前的标记名称, 无则返回空符; 如果索引是一个数值, 返回的是在该位置的最后一个标记, 如是索引是一个标记, 则返回前一个标记, 该标记可能会是在同一个数值位置 |
mark_set(mark, index) | 设置在索引处的标记, 如果是新的标记, 将具有tk.RIGHT 的定位方式, 如果是已有的标记, 将会移到该新的位置, 这个方法可能会改变tk.INSERT/tk.CURRENT 的位置 |
mark_unset(mark) | 移除标记名, 不含 tk.INSERT 及 tk.CURRENT |
scan_dragto(x, y) | 鼠标键按下事件处理程序中已标记位置时, 鼠标滚动事件处理程序拖弋卷动部件, (x, y) 为位置 |
scan_mark(x, y) | 鼠标键按下事件处理程序中标记位置 (x, y) |
search(pattern, index, option, …) | 按pattern (字符串或正则式) 从索引处开始搜索, 如果成功, 返回’line.char’, 否则返回空字符 选项有: backwards - 反向搜索吗, 内定为False count - tk.IntVar() 用来使用该变量的get() 方法, 得到符合pattern 的字符串长度 exact - 设置True 使搜索必须完全符合 forwards - 设置正向搜索, 内定为True regexp - 设True 以使用Tcl 式的正则式, 内定为完全匹配, Tcl 式为python 正则式的字集, 支持. ^ [c1 …] (…) * + ? e1|e2 |
see(index) | 卷动部件, 使索引位置可见 |
tag_add(tagName, index1, index2=None) | 关连标签名 tagName 到索引 index1 处的字符, 或 index1 处到 index2 处前的字符串 |
tag_bind(tagName, sequence, func, add=None) | 绑定标签tagName 的事件sequence 到回调函数func, add ‘+’ 为增加新的函数, 否则为取代所有旧的函数; 只有前两个参数,则返回事件相关的函数; 只有第一个参数, 则返回所有相关函数的列表 |
tag_cget(tagName, option) | 返回标签的选项值 |
tag_config(tagName, option, …) | 设置各选项的值, 没选项时, 则以字典的方式返回全部的选项值 选项如下 background - 背景色, 不能使用bg bgstipple - 在设置背景色的情况下, 为使背景可以显示灰化, 设置为一个标准的点阵图名 borderwidth - 标签所代表的文本外框寛度, 内定为0, 不能使用bd fgstipple - 为使前景可以显示灰化, 设置为一个标准的点阵图名 font - 文本的字体 foreground - 前景色, 不能使用fg justify - 多行文本的对齐方式,LEFT (内定) /RIGHT/CENTER lmargin1 - 第一行的缩格, 内定为0 lmargin2 - 其他行的缩格, 内定为0 offset - 文本上移(正值)或下移(负值)量, 以文本的基准线为参考点, 比如上标或下标 overstrike - 是否画上文本的水平中线, 比如删除线 relief - 花边样式, 内定为FLAT rmargin - 右边的缩格量, 内定为0 spacing1 - 前垂直间距, 内定为0 spacing2 - 内垂直间距, 内定为0 spacing3 - 后垂直间距, 内定为0 tabs - 设置定位符的位置 underline - True 设置下底线 wrap - 换行的长度 |
tag_delete(tagName, …) | 删除标签名, 其相关的绑定, 选项, 字符串的关连性都会移除 |
tag_lower(tagName, belowThis=None) | 下移标签 tagName 至 belowThis 标签下方, 无 belowThis, 则移到标签堆栈的最下方 |
tag_names(index=None) | 返回索引处所有相关的标签名, 或者文本部件内所有的标签名 |
tag_nextrange(tagName, index1, index2=None) | 从索引index1 开始到index2 (或到文本结束处), 如果存在tagName 标签, 返回(i0, i1), i0 为第一个起始位置, i1 为最后一个结束位置. 没有则返回空字符 |
tag_prevrange(tagName, index1, index2=None) | 从索引index1 之前到index2 (或到文本结束处), 如果存在tagName 标签, 返回(i0, i1), i0 为第一个起始位置, i1 为最后一个结束位置. 没有则返回空字符 |
tag_raise(tagName, aboveThis=None) | 上移标签 tagName 至 aboveThis 标签上方, 无 aboveThis, 则移到标签堆栈的最上方 |
tag_ranges(tagName) | 返回标签名所有的文本位置列表 [s0, e0, s1, e1, …], si 为索引起点, ei 为索引终点 |
tag_remove(tagName, index1, index2=None) | 移除从索引 index1 (到 index2) 的标签名 tagName |
tag_unbind(tagName, sequence, funcid=None) | 移除标签名的绑定事件回调函数 |
window_cget(index, option) | 返回嵌入文本中索引处部件的选项值 |
window_configure(index, option) | 设置嵌入文本中索引处部件的各选项值, 或返回全部选项的字典值 |
window_create(index, option, …) | 在索引处建立部件及其选项值, 或使用回调来建立部件 选项有 align - 设置部件垂直的定位, CENTER (内定), TOP , BOTTOM, BASELINE create - 建立子部件的无参数回调函数, 该部件必须是文本部件的子部件, 该函数返回该子部件 padx - 子部件左右间隔, 内定为0 pady - 子部件上下间隔, 内定为0 stretch - 如果行高比子部件高, 是否拉长子部件, 内定为0, 1 则为拉长, 而且align 选项将为无效 window - 嵌入文本中的子部件, 该部件必须是文本部件的子部件 |
window_names() | 返回文本部件中所有子部件的名称列表 |
xview(tk.MOVETO, fraction) | 供水平滚动条 scrollbar 选项 command 使用,fraction 0.0 为最左处, 1.0 为右处 |
xview(tk.SCROLL, n, what) | 水平滚动画布 n 个单位,单位 what 为 tk.UNITS (字符) 或 tk.PAGES (页) |
xview_moveto(fraction) | 同 xview (tk.MOVETO, fraction) |
xview_scroll(n, what) | 同 xview (tk.SCROLL, n, what) |
yview(tk.MOVETO, fraction) | 垂直滚动画布,类似 xview (tk.MOVETO,…) |
yview(tk.SCROLL, n, what) | 垂直滚动画布,类似 xview (tk.SCROLL,…), tk.UNITS (行数) |
yview_moveto(fraction) | 垂直滚动画布,类似 xview_moveto() |
yview_scroll(n, what) | 垂直滚动画布,类似 xview_scroll () |
范例视窗及代码
import tkinter as tk
def add_text(widget, sequence):
global tags
for i, (font, paragraph, color) in enumerate(sequence):
tags[i]=f'tag_{i}'
widget.insert(tk.END, paragraph+'\n', (tags[i],))
widget.tag_configure(tags[i], foreground=color, font=font, spacing1=20)
tags = [None]*5
root = tk.Tk()
root.wm_title("Text Demo")
font12 = ('Courier New', 12)
font16 = ('Courier New', 16, 'bold')
font20 = ('Courier New', 20, 'bold')
t = [[font20, 'Demo Text', 'blue'],
[font16, 'Chapter 1', 'red'],
[font12, 'Python is an easy to learn, powerful programming language. '
'It has efficient high-level data structures and a simple but '
'effective approach to object-oriented programming. Python’s '
'elegant syntax and dynamic typing, together with its interpreted '
'nature, make it an ideal language for scripting and rapid '
'application development in many areas on most platforms.', 'black'],
[font16, 'Chapter 2', 'red'],
[font12, 'This tutorial introduces the reader informally to the basic '
'concepts and features of the Python language and system. It '
'helps to have a Python interpreter handy for hands-on experience'
', but all examples are self-contained, so the tutorial can be '
'read off-line as well.', 'black'] ]
text = tk.Text(bg='white', font=font12, width=80, height=20, bd=10, padx=5, pady=5)
text.grid(row=0, column=0)
add_text(text, t)
text.tag_config(tags[0], justify=tk.CENTER, underline=True)
root.mainloop()
本作品采用《CC 协议》,转载必须注明作者和本文链接