如何清除/删除 Tkinter Text 小部件的内容?

Posted

技术标签:

【中文标题】如何清除/删除 Tkinter Text 小部件的内容?【英文标题】:How to clear/delete the contents of a Tkinter Text widget? 【发布时间】:2015-03-14 00:50:00 【问题描述】:

我正在 Ubuntu 上用TKinter 编写一个 Python 程序来导入和打印 Text 小部件中特定文件夹的文件名。 它只是将文件名添加到Text 中的先前文件名 小部件,但我想先清除它,然后添加一个新的文件名列表。 但我正在努力清除 Text 小部件之前的列表 文件名。

谁能解释一下如何清除Text 小部件?

截图和编码如下:

import os
from Tkinter import *

def viewFile():
    path = os.path.expanduser("~/python")
    for f in os.listdir(path):
        tex.insert(END, f + "\n")

if __name__ == '__main__':
    root = Tk()

    step= root.attributes('-fullscreen', True)
    step = LabelFrame(root, text="FILE MANAGER", font="Arial 20 bold italic")
    step.grid(row=0, columnspan=7, sticky='W', padx=100, pady=5, ipadx=130, ipady=25)

    Button(step, text="File View", font="Arial 8 bold italic", activebackground=
           "turquoise", width=30, height=5, command=viewFile).grid(row=1, column=2)
    Button(step, text="Quit", font="Arial 8 bold italic", activebackground=
           "turquoise", width=20, height=5, command=root.quit).grid(row=1, column=5)

    tex = Text(master=root)
    scr=Scrollbar(root, orient=VERTICAL, command=tex.yview)
    scr.grid(row=2, column=2, rowspan=15, columnspan=1, sticky=NS)
    tex.grid(row=2, column=1, sticky=W)
    tex.config(yscrollcommand=scr.set, font=('Arial', 8, 'bold', 'italic'))

    root.mainloop()

【问题讨论】:

您阅读过文本小部件的任何文档吗?此功能已明确记录在案。你说你很挣扎,你能告诉我们你的尝试吗? 也许effbot.org/tkinterbook/entry.htm#Tkinter.Entry.delete-method 你能不能在这里写一个语句来得到我需要的结果 @BryanOakley 阅读文档似乎是一个好点,尽管在我看来 tkinter 文档需要某种转移工作。因此,如果您问我:以问题的形式提供更多文档是很好的文档。所以我要 +1。 @enthus1ast:我完全同意在线 effbot.org 文档还有很多不足之处。所以我没有使用它,而是经常使用Tkinter 8.5 reference guide,它是由 John Shipman 为 NM Tech 计算机中心编写的。 【参考方案1】:

我只添加了 '1.0' 并开始工作

tex.delete('1.0', END)

你也可以试试这个

【讨论】:

谢谢,一旦我意识到我需要执行 tex.config(state=NORMAL) 才能删除它,它就起作用了。 1.0'1.0' 都可以。确保小部件的状态设置为正常,tex.config(state=NORMAL) @TankorSmash 您的评论有助于我理解我的错误。如果state=disabled,那就不行了。 我收到此错误self.Text_box.delete('1.0' , END) NameError: name 'END' is not defined @NeoNØVÅ7 END 仅在您执行 from Tkinter import * 时才有效。如果您尚未从 Tkinter 导入所有内容,则需要改为 tk.END【参考方案2】:

根据 tkinterbook,清除文本元素的代码应该是:

text.delete(1.0,END)

这对我有用。 source

这与清除入口元素不同,它是这样完成的:

entry.delete(0,END) #注意 0 而不是 1.0

【讨论】:

我觉得 1.0 有效(尽管确实有效)很奇怪,因为我的理解是 Tkinter 索引应该指定为像 '1.0' 这样的字符串(这也有效,并且在大多数情况下都是这样完成的同一文档中的其他位置)。【参考方案3】:

这行得通

import tkinter as tk
inputEdit.delete("1.0",tk.END)

【讨论】:

虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值【参考方案4】:
from Tkinter import *

app = Tk()

# Text Widget + Font Size
txt = Text(app, font=('Verdana',8))
txt.pack()

# Delete Button
btn = Button(app, text='Delete', command=lambda: txt.delete(1.0,END))
btn.pack()

app.mainloop()

这里是提到的txt.delete(1.0,END) 的示例。

lambda 的使用使我们能够在不定义实际函数的情况下删除内容。

【讨论】:

如何设置查看文本数据的滚动条?【参考方案5】:

对我来说,“1.0”不起作用,但“0”起作用。这是 Python 2.7.12,仅供参考。还取决于您如何导入模块。方法如下:

import Tkinter as tk
window = tk.Tk()
textBox = tk.Entry(window)
textBox.pack()

当您需要清除它时,会调用以下代码。在我的例子中,有一个按钮保存保存条目文本框中的数据,单击按钮后,文本框被清除

textBox.delete('0',tk.END)

【讨论】:

'0' 在我尝试的时候给了我一个错误,我相信正确的值是'1.0',所以你的代码应该是textBox.delete('0',tk.END)【参考方案6】:

我认为是这样的:

text.delete("1.0", tkinter.END)

或者如果你做了from tkinter import *

text.delete("1.0", END)

应该可以的

【讨论】:

这是@Fahadkalis 接受的解决方案的副本,该解决方案早在 2015 年就已发布。【参考方案7】:

很多答案要求您使用END,但如果这对您不起作用,请尝试:

text.delete("1.0", "end-1c")

【讨论】:

【参考方案8】:
text.delete(0, END)

这会删除文本框内的所有内容

【讨论】:

@CogitoErgoCogitoSum 嗯嗯嗯。首先。不要假设。看来你是 2 小时前来过这里的?我的帖子是 6 月 7 日!你知道答案可以删除吗?他们实际上可以。当这个答案被复制时,我的评论被发布了。所以请不要假设并要求我以礼貌的方式删除评论,因为没有理由粗鲁。另外,这个答案是重复的 (textBox.delete('0',tk.END)) 是一样的。

以上是关于如何清除/删除 Tkinter Text 小部件的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 tkinter Text 小部件中突出显示文本

Python清除在Tkinter小部件中使用的列表

如何从Tkinter,Python中的Text小部件中移除焦点

如何将Tkinter Text小部件的撤消/重做历史记录复制到另一个小部件中

如何在字体更改时停止 Tkinter Text 小部件调整大小?

如何强制 tkinter 文本小部件保持在一行