无法在python

时间:2017-11-15 22:39:50

标签: python tkinter

我想知道这里有什么问题?单击按钮时,应突出显示列表中的所有单词。但是,这是出现的错误:

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'

感谢您的帮助。如果您有任何关于如何改善堆栈溢出问题的提示,请告诉我。

1 个答案:

答案 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, ...)
        ...
    ...