Python Tkinter tk.Text多行文本输入框 作者:马育民 • 2025-08-27 23:48 • 阅读:10006 # 介绍 在 Tkinter 中,`tk.Text` 是用于创建多行文本输入或显示区域的核心组件,支持富文本编辑、滚动、换行等功能,广泛用于需要处理多行文本的场景(如文本编辑器、日志显示、聊天窗口等)。 ### 适用场景 - 多行文本输入(如留言板、富文本编辑器) - 文本显示(如日志查看器、帮助文档) - 简单的文档编辑(支持基本格式化) `tk.Text` 是 Tkinter 中功能最丰富的文本组件,虽然不如专业 GUI 库(如 PyQt/PySide)的文本组件强大,但足以满足中小型应用的文本处理需求。 # 基本用法 `tk.Text` 的创建和配置方式如下: ```python import tkinter as tk root = tk.Tk() # 创建 Text 组件 text_widget = tk.Text( root, width=50, # 宽度(字符数) height=10, # 高度(行数) wrap=tk.WORD # 换行方式(WORD:按单词换行;CHAR:按字符换行;NONE:不自动换行) ) text_widget.pack(padx=10, pady=10) root.mainloop() ``` ### 关键参数 | 参数 | 说明 | |--------------|---------------------------------------| | `width` | 宽度(以平均字符宽度为单位) | | `height` | 高度(以行数为单位) | | `wrap` | 换行模式(`tk.WORD`/`tk.CHAR`/`tk.NONE`) | | `state` | 状态(`tk.NORMAL` 可编辑,`tk.DISABLED` 只读) | | `bg`/`fg` | 背景色/前景色(文本颜色) | | `font` | 字体(如 `("SimHei", 10)`) | | `padx`/`pady`| 内部边距 | ### 滚动与绑定 通常与 `tk.Scrollbar` 结合使用,实现滚动功能: ```python # 创建滚动条 scrollbar = tk.Scrollbar(root, command=text_widget.yview) scrollbar.pack(side=tk.RIGHT, fill=tk.Y) # 绑定 Text 与滚动条 text_widget.config(yscrollcommand=scrollbar.set) ``` ### 文本插入 ``` insert(index, text) ``` **参数解释:** - `index`:字符串类型。是插入位置(格式为 `"行.列"`,行和列均从 0 开始),特殊位置如 `"1.0"`(第1行第0列,即起始位置)、`"end"`(末尾)。 - `text`:要插入的文本 **例子:** ```python text_widget.insert("1.0", "Hello, Text Widget!\n这是第二行文本") ``` ```python text_widget.insert("end", "Hello, Text Widget!\n插入到末尾") ``` ### 文本获取 ``` get(start_index, end_index) ``` 获取指定范围的文本 **参数解释:** - `start_index`:开始位置,字符串类型。(格式为 `"行.列"`,行和列均从 0 开始),特殊位置如 `"1.0"`(第1行第0列,即起始位置)、`"end"`(末尾) - `end_index`:结束位置,字符串类型。(格式为 `"行.列"`,行和列均从 0 开始),特殊位置如 `"1.0"`(第1行第0列,即起始位置)、`"end"`(末尾) **例子:** `"1.0", "end"` 表示获取全部文本(`end` 会包含末尾换行符,可使用 `"end-1c"` 去除)。 ```python all_text = text_widget.get("1.0", "end-1c") # 获取所有文本(不含末尾换行) ``` ### 删除文本 ``` delete(start_index, end_index) ``` - `start_index`:开始位置,字符串类型。(格式为 `"行.列"`,行和列均从 0 开始),特殊位置如 `"1.0"`(第1行第0列,即起始位置)、`"end"`(末尾) - `end_index`:结束位置,字符串类型。(格式为 `"行.列"`,行和列均从 0 开始),特殊位置如 `"1.0"`(第1行第0列,即起始位置)、`"end"`(末尾) **例子:** `"1.0", "end"` 表示清空所有文本。 ```python text_widget.delete("1.0", "end") # 清空所有文本 ``` ### 格式化与样式 `tk.Text` 支持通过 **标签(tag)** 设置文本样式(颜色、字体、下划线等): ```python # 创建标签(定义样式) text_widget.tag_configure("red", foreground="red", font=("Arial", 12, "bold")) text_widget.tag_configure("blue", foreground="blue", underline=True) # 插入带标签的文本 text_widget.insert("end", "红色粗体文本\n", "red") text_widget.insert("end", "蓝色下划线文本", "blue") # 为已有文本添加标签(从1.0到1.5的范围) text_widget.tag_add("red", "1.0", "1.5") ``` # 事件绑定 常用事件如文本变化、鼠标点击等: ```python def on_text_change(event): print("文本已修改") # 绑定文本变化事件( 表示按键松开时触发) text_widget.bind("", on_text_change) ``` 原文出处:http://malaoshi.top/show_1GW1kpz0p5P3.html