tkinter库文本框控件

建议有python基础的人观看,本文章较为详细的介绍了tkinter库的text文本控件,希望大佬进行指正
本人(菜鸟)


# text 文本控件是 Tkinter 中经常使用的控件,与 Entry 控件相比,
# Text 控件用于显示和编辑多行文本,而 Entry 控件则适合处理单行文本。
# Text 控件类似 HTML 中的<textarea>标签,允许用户以不同的样式、属性来显示和编辑文本
# ,它可以包含纯文本或者格式化文本,同时支持嵌入图片、显示超链接以及带有 CSS 格式的 HTML 等
# 。Text 控件的有很多的适用场景,比如显示某个产品的详细信息,或者人物介绍等。
# 下面我们对 Text 控件属性和常用方法做简单的介绍。

# import tkinter as tk
#
# # 创建主窗口
# root = tk.Tk()
#
# # 创建一个Text控件
# text = tk.Text(root, height=10, width=50)
#
# # 设置Text控件的参数
# text.config(
#     autoseparators=True,  # 启用自动分隔符
#     exportselection=True,  # 允许选中文本被复制到剪贴板
#     insertbackground="blue",  # 设置插入光标颜色为蓝色(就是插入时的竖线)
#     insertborderwidth=30,  # 设置插入光标边框宽度为2像素
#     insertofftime=500,  # 设置光标灭的状态持续时间为500毫秒
#     insertontime=500,  # 设置光标亮的状态持续时间为500毫秒
#     selectbackground="yellow",  # 设置选中文本的背景色为黄色
#     selectborderwidth=2,  # 设置选中文本的边框宽度为2像素
#     selectforeground="red",  # 设置选中文本的字体颜色为红色
#     setgrid=True,  # 启用网格控制
#     spacing1=5,  # 设置文本块中每一行与上方的空白间隔为5像素
#     spacing2=5,  # 设置文本块中自动换行的各行间的空白间隔为5像素
#     spacing3=5,  # 设置文本组件文本中每一行与下方的空白间隔为5像素
#     tabs=(2,),
#     # tabs参数需要特殊的处理,这里不设置
#     undo=True,  # 启用撤销功能
#     wrap="word",  # 按单词自动换行
# )
#
# # 将Text控件放置在窗口中
# text.pack(padx=20, pady=20)
#
# # 启动事件循环
# root.mainloop()


# 1. **`autoseparators`**: 默认值为 `True`,表示在执行撤销操作时是否自动插入一个“分隔符”。分隔符用于分隔操作记录,
# 以便用户可以更清晰地看到撤销的历史记录。

# 2. **`exportselection`**: 默认值为 `True`,表示被选中的文本是否可以被复制到剪切板。如果设置为 `False`,
# 则选中的文本不能被复制。

# 3. **`insertbackground`**: 设置插入光标的颜色。默认值为 `BLACK`,但你可以设置为任何颜色。

# 4. **`insertborderwidth`**: 设置插入光标的边框宽度。默认值为 `0`,即没有边框。

# 5. **`insertofftime`**: 控制光标的闪烁频率(灭的状态),即光标在不可见状态下的持续时间。

# 6. **`insertontime`**: 控制光标的闪烁频率(亮的状态),即光标在可见状态下的持续时间。

# 7. **`selectbackground`**: 指定被选中文本的背景颜色。默认值由系统决定,但你可以设置为任何颜色。

# 8. **`selectborderwidth`**: 指定被选中文本的背景颜色。默认值是 `0`,即没有边框。

# 9. **`selectforeground`**: 指定被选中文本的字体颜色。默认值由系统指定,但你可以设置为任何颜色。

# 10. **`setgrid`**: 默认值是 `False`,指定一个布尔类型的值,确定是否启用网格控制。如果启用,文本的插入和移动操作将受到网格的限制。

# 11. **`spacing1`**: 指定 `Text` 控件文本块中每一行与上方的空白间隔。默认值为 `0`。

# 12. **`spacing2`**: 指定 `Text` 控件文本块中自动换行的各行间的空白间隔。默认值为 `0`。

# 13. **`spacing3`**: 指定 `Text` 组件文本中每一行与下方的空白间隔。默认值是 `0`。

# 14. **`tabs`**: 定制 `Text` 控件中 `Tab` 按键的功能。默认被定义为 `8` 个字符宽度,但你可以设置为其他宽度。
# 设置Tab键的行为,使其每次按键时向右缩进2个字符
# text.config(tabs=(2,))

# 15. **`undo`**: 该参数默认为 `False`,表示关闭 `Text` 控件的“撤销”功能。如果设置为 `True`,则表示开启。

# 16. **`wrap`**: 该参数用来设置当一行文本的长度超过 `width` 选项设置的宽度时,是否自动换行。参数值可以是 `none`(不自动换行)、`char`(按字符自动换行)、`word`(按单词自动换行)。

# 17. **`xscrollcommand`**: 该参数与 `Scrollbar` 相关联,表示沿水平方向上下滑动。

# 18. **`yscrollcommand`**: 该参数与 `Scrollbar` 相关联,表示沿垂直方向左右滑动。

#这里的 'insert' 指的是光标当前位置。
#
# text.insert 方法的第一个参数指定了插入文本的位置,可以是以下几种之一:
# 'end':在文本框的末尾插入文本。
# 'insert':在当前光标位置插入文本。
# 也可以是一个整数索引,表示插入到文本框中的具体位置

# Index文本索引
# index 参数通常用于指定文本中的位置,以便进行插入、获取、选择或删除文本等操作
# 这与我们经常使用 Python 索引是一样的,不过在 Text 文本控件中,两者之间的使用形式存在一些差异


# import tkinter as tk
#
# # 创建主窗口
# root = tk.Tk()
#
# # 创建一个Text控件
# text = tk.Text(root, height=10, width=50)
#
# text.insert("1.0", "这是一个多行文本控件,可以显示和编辑多行文本。")# 表示文本的第一行第一列插入文本
#
# text.insert("2.3", "在文本的第二行第三列插入文本,,,")#在文本的第二行第三列插入文本
#
# text.insert("end", "文本结束插入文本")#文本结束插入文本
#
# text.insert("2.end", "表示在第二行末尾插入文本")#表示在第二行末尾插入文本
# # 将Text控件放置在窗口中
# text.pack(padx=20, pady=20)
#
# # 启动事件循环
# root.mainloop()


# “1.0”:
# 表示文本的第一行第一列。
# 用法:text.get("1.0", "1.0") 或 text.insert("1.0", "文本")

# “end”:
# 表示文本的末尾。
# 用法:text.get("end-1c", "end") 或 text.insert("end", "文本")

# “line.column”:
# 表示某一行某一列的位置,例如 "2.3" 表示第二行第三列。
# 用法:text.get("2.3", "2.3") 或 text.insert("2.3", "文本")

# “line.end”:
# 表示某一行到末尾的位置,例如 "2.end" 表示第二行末尾。
# 用法:text.get("2.end", "2.end") 或 text.insert("2.end", "文本")

# “sel.first” 和 “sel.last”:
# 用于表示选中文本的开始和结束位置。
# 用法:text.mark_set("sel.first", "sel.first") 和 text.mark_set("sel.last", "sel.last")
# 这些标记通常与 SEL_FIRST 和 SEL_LAST 一起使用,表示当前被选中的范围。
#text.mark_set("sel.first", "1.0")
# text.mark_set("sel.last", "1.10")



# Tag文本标签
# Tag(标签)用来给一定范围内的文字起一个标签名,通过该标签名就能操控某一范围内的文字
# ,比如修改文本的字体、尺寸和颜色。除此之外,该标签还可以和事件函数绑定在一起使用
# import tkinter as tk
#
# def on_tag_click(event):
#     print("Tag clicked at position:", event.x, event.y)
#
# def main():
#     # 创建主窗口
#     root = tk.Tk()
#     root.title("Tkinter Text Tag Example")
#
#     # 创建 Text 控件
#     text = tk.Text(root, width=40, height=10)
#     text.pack(padx=10, pady=10)
#
#     # 插入文本
#     text.insert(tk.END, "这是一个示例文本。\n")
#     text.insert(tk.END, "这部分文本将被标记并使用不同的样式。\n")
#     text.insert(tk.END, "这是最后一行。")
#
#     # 为标记的文本配置样式
#     text.tag_configure("highlight", background="yellow", foreground="red")
#
#     # 标记文本的一部分
#     text.tag_add("highlight", "1.0", "2.0")  # 从第1行第1字符到第2行第1个字符之前
#
#     # 为标记的文本绑定点击事件
#     text.tag_bind("highlight", "<Button-1>", on_tag_click)
#
#     # 使用字典形式配置标记文本的样式
#     options = {"background": "yellow", "foreground": "red"}
#     text.tag_configure("highlight", cnf=options)
#
#     # 获取指定索引位置处的所有标签名称
#     tags_at_index = text.tag_names("1.5")  # 获取第一行第五个字符处的标签名称
#     print("Tags at index 1.5:", tags_at_index)
#
#     def find_next_tag_range():
#         next_range = text.tag_nextrange("highlight", "1.0")
#         if next_range:
#             start, end = next_range
#             print("Next range of highlight tag:", start, "to", end)
#         else:
#             print("No more ranges found for highlight tag.")
#
#     # 查找下一个标签范围
#     find_next_tag_range()
#
#     # 调整标记的堆叠顺序
#     text.tag_raise("highlight")
#
#     # 获取指定标签在文本中所有出现范围的列表
#     ranges = text.tag_ranges("highlight")
#     if ranges:
#         print("Ranges of highlight tag:")
#         for i in range(0, len(ranges), 2):
#             start, end = ranges[i], ranges[i+1]
#             print(f"{start} to {end}")
#     else:
#         print("No ranges found for highlight tag.")
#
#     # 移除指定标签在指定范围内的应用
#     text.tag_remove("highlight", "1.5", "2.0")
#
#     # 运行主循环
#     root.mainloop()
#
# if __name__ == "__main__":
#     main()



# 1. tag_add(tagName, index1, index2=None)
# 参数:
# tagName: 标签的名称。
# index1: 开始索引。
# index2: 结束索引(可选)。
#tag_add 方法允许你为 Text 控件中的特定文本范围添加标记,
# 这些标记可以用来为文本应用样式、绑定事件等



# 2. tag_bind(tagName, sequence, func, add=None)
# 参数:
# tagName: 标签的名称。
# sequence: 事件序列(如 <Button-1> 表示鼠标左键点击)。
# func: 被绑定的函数。
# add: 是否添加到现有的绑定(默认为 None,表示替换现有绑定;如果是 '+ ',则添加到现有绑定)。


# 3. tag_cget(tagName, option)
# 参数:
# tagName: 标签的名称。
# option: 要查询的选项名称。

# 4. tag_configure(tagName, cnf=None, **kw)
# 参数:
# tagName: 标签的名称。
# cnf: 字典形式的配置选项(可选)。
# **kw: 关键字参数形式的配置选项。
# **kw 参数允许你以关键字参数的形式传递配置选项。
# 例如,可以直接使用 background="yellow" 和 foreground="red" 来配置标记的背景色和前景色



# 5. tag_delete(tagNames)
# 参数:
# tagNames: 要删除的标签名称或名称列表。
#删除后只是删除了标签的标记,标签本身还在

# 6. tag_lower(tagName, belowThis=None)
# 参数:
# tagName: 标签的名称。
# belowThis: 可选的另一个标签名称,表示 tagName 将置于其下。
# 标签不仅可以用于样式,还可以用于绑定事件。通过堆叠标签,可以在文本的不同部分绑定不同的事件。
# 为一段文本的不同部分绑定不同的点击事件,比如一部分文本链接到一个网页,另一部分链接到另一个页面
# 标签堆叠(tag stacking)在 Tkinter 的 Text 控件中是非常有用的特性,
# 它允许你为文本的不同部分应用多个标签,
# 并控制这些标签的显示顺序。标签堆叠可以让你实现复杂的文本样式和交互效果
import webbrowser


# 7. tag_names(index=None)
# 参数:
# index: 可选的索引位置。
# 获取指定索引位置处的所有标签的名称列表。
# 如果没有提供 index 参数,则返回所有已定义的标签名称列表。


# 8. tag_nextrange(tagName, index1, index2=None)
# 参数:
# tagName: 标签的名称。
# index1: 开始索引。
# index2: 结束索引(可选)。
# 查找指定标签在文本中下一个出现的位置范围。
# 如果提供了 index2 参数,则搜索范围限制在 index1 和 index2 之间。
# 如果没有找到匹配项,则返回一个空元组 ()



# 9. tag_raise(tagName, aboveThis=None)
# 参数:
# tagName: 标签的名称。
# aboveThis: 可选的另一个标签名称,表示 tagName 将置于其上。
# 调整标签的堆叠顺序,使一个标签位于另一个标签之上


# 10. tag_ranges(tagName)
# 参数:
# tagName: 标签的名称。
# 返回指定标签在文本中所有出现范围的列表


# 11. tag_remove(tagName, index1, index2=None)
# 参数:
# tagName: 标签的名称。
# index1: 开始索引。
# index2: 结束索引(可选)。
# 移除指定标签在指定范围内的应用





# Mark(标记)通常被用来当作书签,它可以帮助用户快速找到内容的指定位置,并且跟随相应的字符一起移动。
# 有两种类型的标记,分别是“INSERT”和“CURRENT”,其含义如下:
# INSERT:指定当前插入光标的位置,Tkinter
# 会在该位置绘制一个闪烁的光标;
# CURRENT:用于指定当前光标所处坐标最邻近的位置。

import tkinter as tk

# 创建主窗口
root = tk.Tk()
root.title("Tkinter Text Mark Example")

# 创建 Text 控件
text = tk.Text(root, width=40, height=10)
text.pack(padx=10, pady=10)

# 插入文本
text.insert(tk.END, "这是第一行。\n")
text.insert(tk.END, "这是第二行。\n")
text.insert(tk.END, "这是最后一行。")

# 设置一些标记
text.mark_set("start", "1.0")  # 在文档的第一行第一列设置标记 "start"
text.mark_set("end", "3.0")    # 在文档的最后一行第一列设置标记 "end"

# 设置标记 "middle" 并让它向左移动
text.mark_set("middle", "2.0")  # 在文档的第二行第一列设置标记 "middle"
text.mark_gravity("middle", "left")

# 输出所有已设置的标记名字
print("所有标记的名字:", text.mark_names())

# 记录光标位置
text.mark_set("cursor_position", "insert")

# 查找位置 "2.0" 后面的下一个标记的名字
marks_after_middle = [m for m in text.mark_names() if text.compare(m, ">", "2.0")]
next_mark = marks_after_middle[0] if marks_after_middle else "没有找到 '2.0' 后面的下一个标记"
print("位置 '2.0' 后面的下一个标记是:", next_mark)

# 查找位置 "2.0" 前面的一个标记的名字
marks_before_middle = [m for m in text.mark_names() if text.compare(m, "<", "2.0")]
previous_mark = marks_before_middle[-1] if marks_before_middle else "没有找到 '2.0' 前面的一个标记"
print("位置 '2.0' 前面的一个标记是:", previous_mark)

# 删除标记 "middle"
text.mark_unset("middle")

# 最后输出所有剩余标记的名字
print("删除标记 'middle' 后的所有标记的名字:", text.mark_names())

# 运行主循环
root.mainloop()



### `mark_gravity(markName, direction=None)`
# - **参数**:
#   - `markName`: 标记名。
#   - `direction`: 移动方向,可为 `"right"` 或 `"left"`;默认为 `"right"`。
# - **功能**: 设置标记移动方向。
#
# ### `mark_names()`
# - **参数**: 无
# - **功能**: 返回所有标记的名字。
#
# ### `mark_next(index)`
# - **参数**:
#   - `index`: 位置,如 `"1.0"`。
# - **功能**: 返回指定位置后的下一个标记名。
#
# ### `mark_previous(index)`
# - **参数**:
#   - `index`: 位置,如 `"1.0"`。
# - **功能**: 返回指定位置前的一个标记名。
#
# ### `mark_set(markName, index)`
# - **参数**:
#   - `markName`: 标记名。
#   - `index`: 位置,如 `"1.0"`。
# - **功能**: 移动或创建标记至指定位置。
#
# ### `mark_unset(MarkName)`
# - **参数**:
#   - `MarkName`: 标记名。
# - **功能**: 删除指定标记。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值