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 标签没有范围时,受保护的块不会执行任何操作。
有条件地清除文本
若要仅在控件包含用户输入的字符时才清除,请获取截至 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();这也会将空格和制表符视为空白。