无法清除输出文本:tkinter.TclError: 错误的文本索引“0”

7
当运行以下代码并点击tkinter按钮时,会产生以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Scypy\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "D:\modpu\Documents\Python\DelMe.py", line 5, in click
    OutputBox.delete(0, END)
  File "D:\Scypy\lib\tkinter\__init__.py", line 3133, in delete
    self.tk.call(self._w, 'delete', index1, index2)
_tkinter.TclError: bad text index "0"

由于某些原因,该代码成功清除了输入框中的文本,但未能清除输出框中的文本(反而导致崩溃)。
如有帮助,感谢您的支持。
from tkinter import *

def click():
    MainTextBox.delete(0, END)  #This works
    OutputBox.delete(0, END) #This doesn't work

GUI = Tk()
MainTextBox = Entry(GUI, width = 20, bg = "white")
MainTextBox.grid(row = 0, column = 0, sticky = W)
Button(GUI, text = "SUBMIT", width = 6, command = click).grid(row = 1, column = 0, sticky = W)
OutputBox = Text(GUI, width = 100, height = 10, wrap = WORD, background = "orange")
OutputBox.grid(row = 4, column = 0, sticky = W)
OutputBox.insert(END, "Example text")

GUI.mainloop()

2
文本和输入小部件是不同的。错误提示说,“0”是文本小部件的无效索引。 - Bryan Oakley
3
这也曾让我困扰。就像Bryan(和出现的错误)所说,0在文本小部件中是无效的索引。在文本小部件中,您需要使用'1.0'而不是'0'。 - Korzak
3个回答

11
在这种情况下,这是解决方案:
from tkinter import *

def click():
    MainTextBox.delete(0, END)  
    OutputBox.delete('1.0', END) 

GUI = Tk()
MainTextBox = Entry(GUI, width = 20, bg = "white")
MainTextBox.grid(row = 0, column = 0, sticky = W)
Button(GUI, text = "SUBMIT", width = 6, command = click).grid(row = 1, column = 0, sticky = W)
OutputBox = Text(GUI, width = 100, height = 10, wrap = WORD, background = "orange")
OutputBox.grid(row = 4, column = 0, sticky = W)
OutputBox.insert(END, "Example text")

GUI.mainloop()

21
如果你解释一下两者之间的区别,你的回答会更好。否则读者就需要逐行逐字地比较你的代码与原始代码。 - Bryan Oakley
1
你解决了我的问题,但这太奇怪了!为什么索引会是一个带有浮点数的字符串? - user46147
2
代码中唯一的区别在于click()函数的最后一行。OutputBox.delete(0, END)中的参数被更改为=> ('1.0', END),因为文本小部件必须具有索引1.0而不是0。 - DC007744
@DC007744 谢谢!我试了很多方法,只有使用带有“1.0”的字符串才能正常工作。为什么这个没有被记录在文档中呢?这太荒谬了,因为其他的只需要一个 0 - Mote Zart

2
def click(): 
    OutputBox.delete('0', END)

对我来说,在Python 3.8.1中有效,因为'1.0'会抛出错误。


2
def click(): 
    OutputBox.delete('1.0', END)

有时当你在IDLE中运行整数时,系统可能不支持它,我知道这很令人沮丧,但是确实有效。


请将您的答案格式化为代码和解释两个部分。 - mishsx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接