HOWTO · Tkinter

如何删除 Tkinter 文本框的内容

了解如何使用 delete 清除 Tkinter Text 控件、删除一个范围或所选内容,并在清除前检查其内容。

本页内容

若要清除 Tkinter Text 控件,请使用第一个文本索引和结尾索引调用其 delete 方法:text_box.delete("1.0", "end")。第一个索引 1.0 是第一行的开头。Tkinter 在内部保留一个必需的结尾换行符,因此删除到 end 会移除所有输入的文本。

清除 Tkinter Text 控件的所有文本

使用 text_box.delete("1.0", "end") 移除输入的文本。1.0 索引标记第一行的开头,而 end 到达 Tkinter 的结尾换行符哨兵。以下无头示例使用一个小型替代物来演示调用和结果内容,而无需打开窗口:

class TextBox:
    def __init__(self, content):
        self.content = content

    def delete(self, start, end):
        if start == "1.0" and end == "end":
            self.content = ""


text_box = TextBox("Draft text")
text_box.delete("1.0", "end")
print("Cleared" if text_box.content == "" else "Still has text")
Cleared

在 GUI 中,将 text_box 设置为 tk.Text 控件,并从按钮回调中调用相同的 delete("1.0", "end") 方法。该 GUI 版本需要图形显示器,因此此处未将其显示为已执行的示例。

"1.0"和"end"是指 Tkinter 文本框控件中内容的第一个字符和最后一个字符,与如何获取文本的输入的文章中介绍的内容相同。

删除一个范围或一个字符

Text.delete(index1, index2=None) 删除从 index1 开始的文本,并在提供 index2 时继续到 index2 为止,但不包含 index2。文本索引使用 line.character 形式;行从 1 开始,字符位置从 0 开始。例如,text_box.delete("2.0", "3.0") 删除第 2 行的文本,直到第 3 行的开头。使用一个索引时,例如 text_box.delete("2.0"),Tkinter 会删除该位置的字符。end 索引指控件结尾换行符之后的位置,这就是它能清除所有输入文本的原因。

安全地删除所选文本

tk.SEL_FIRST 和 tk.SEL_LAST 标识所选范围,但在没有所选内容时使用它们可能会引发 tk.TclError。删除前请检查 sel 标签:if text_box.tag_ranges("sel"):,然后调用 text_box.delete(tk.SEL_FIRST, tk.SEL_LAST)。所选内容的结尾索引是排他的,因此这会删除所选文本,而不会删除其后紧邻的字符。当 sel 标签没有范围时,受保护的块不会执行任何操作。

清除 Tkinter 文本框控件 - 删除选定的文本

有条件地清除文本

若要仅在控件包含用户输入的字符时才清除,请获取截至 end-1c 的内容,该索引排除了 Tkinter 的结尾换行符。空字符串表示没有输入的字符;空格和制表符仍算作内容。例如,if text_box.get("1.0", "end-1c"): 对于任何非空内容(包括空白字符)都为真。将 text_box.delete("1.0", "end") 放在该分支中即可清除它。如果在您的应用程序中,仅由空白组成的内容应算作空白,请改为测试 text_box.get("1.0", "end-1c").strip();这也会将空格和制表符视为空白。

清除 Tkinter 文本框控件 - 以编程方式删除文本