我想知道这里有什么问题?单击按钮时,应突出显示列表中的所有单词。但是,这是出现的错误:
Exception in Tkinter callback <br>
Traceback (most recent call last):
File "C:\Users\Reuben_2\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File "C:/Users/Reuben_2/AppData/Local/Programs/Python/Python36/Writing is hard/MyHighlighter.py", line 54, in highlight_text
pos = ArticleTextBox.search(names[2], pos, stopindex=END, count=lenght)
File "C:\Users\Reuben_2\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 3332, in search
return str(self.tk.call(tuple(args)))
_tkinter.TclError: bad text index ""
这是我的代码:
def highlight_text():
article=ArticleTextBox.get(0.0,tk.END)
my_sent=article
names=(get_continuous_chunks(my_sent))
lenght = StringVar()
pos = '1.0'
for w in range(0,nameslistlength):
while True:
pos = ArticleTextBox.search(names[w], pos, stopindex=END, count=lenght)
if not pos:
break
ArticleTextBox.tag_add('highlight', pos, '{}+{}c'.format(pos, lenght.get()))
pos += '+1c'
感谢您的帮助。如果您有任何关于如何改善堆栈溢出问题的提示,请告诉我。
答案 0 :(得分:0)
错误发生在for
循环的第二次迭代开始时。
第一次迭代只能在while
循环结束时结束,并且只能在pos
为空字符串时结束。因此,当for
循环的第二次迭代开始时,pos
是空字符串,然后在调用search
时尝试使用该字符串。
解决方案是在pos
循环开始时将"1.0"
重置为for
,假设for
循环的目的是搜索整个小部件names
中的每个字词或短语。
顺便说一句,迭代循环的pythonic方法是获取长度然后迭代索引。相反,直接遍历列表:
for name in names:
pos = "1.0"
while True:
pos = ArticleTextBox.search(name, ...)
...
...