Python Tkinter tk.Text多行文本输入框

介绍

在 Tkinter 中,tk.Text 是用于创建多行文本输入或显示区域的核心组件,支持富文本编辑、滚动、换行等功能,广泛用于需要处理多行文本的场景(如文本编辑器、日志显示、聊天窗口等)。

适用场景

  • 多行文本输入(如留言板、富文本编辑器)
  • 文本显示(如日志查看器、帮助文档)
  • 简单的文档编辑(支持基本格式化)

tk.Text 是 Tkinter 中功能最丰富的文本组件,虽然不如专业 GUI 库(如 PyQt/PySide)的文本组件强大,但足以满足中小型应用的文本处理需求。

基本用法

tk.Text 的创建和配置方式如下:

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 结合使用,实现滚动功能:

# 创建滚动条
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:要插入的文本

例子:

text_widget.insert("1.0", "Hello, Text Widget!\n这是第二行文本")
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" 去除)。

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" 表示清空所有文本。

text_widget.delete("1.0", "end")  # 清空所有文本

格式化与样式

tk.Text 支持通过 标签(tag) 设置文本样式(颜色、字体、下划线等):

# 创建标签(定义样式)
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")

事件绑定

常用事件如文本变化、鼠标点击等:

def on_text_change(event):
    print("文本已修改")

# 绑定文本变化事件(<KeyRelease> 表示按键松开时触发)
text_widget.bind("<KeyRelease>", on_text_change)

原文出处:/show_1GW1kpz0p5P3.html