2017-02-13 74 views
1

我正在做一个一致性的工具,我想强调的所有颜色的结果。在下面的代码中,它只适用于第一行。有新行时,标签将中断。例如,当我在字符串中搜索单词“蟒蛇”下面,标签只强调了第一线。它不适用于第二和第三行。请帮帮我。如何添加标签到tkinter文本中的新行?

import tkinter as tk 
from tkinter import ttk 
import re 

# ========================== 

strings="""blah blah blah python blah blah blah 
blah blah blah python blah blah blah 
blah blah blah python blah blah blah 
""" 

# ========================== 

class Application(tk.Frame): 
    def __init__(self, master=None): 
     super().__init__(master) 
     self.pack() 
     self.create_widget() 

    def create_widget(self): 
     self.word_entry=ttk.Entry(self) 
     self.word_entry.pack() 
     self.word_entry.bind('<Return>', self.concord) 

     self.string_text=tk.Text(self) 
     self.string_text.insert(tk.INSERT, strings) 
     self.string_text.pack() 

    # ========================== 

    def concord(self, event): 
     word_concord=re.finditer(self.word_entry.get(), self.string_text.get(1.0, tk.END)) 
     for word_found in word_concord: 
      self.string_text.tag_add('color', '1.'+str(word_found.start()), '1.'+str(word_found.end())) 
      self.string_text.tag_config('color', background='yellow') 


# ========================== 

def main(): 
    root=tk.Tk() 
    myApp=Application(master=root) 
    myApp.mainloop() 

if __name__=='__main__': 
    main() 

回答

0

用于添加高亮显示各项指标开头为“1”,所以它总是只是要突显的第一句话。例如,如果线长36个字符中,“1.100”的索引将被视为完全一样“1.36”。

Tkinter的可以通过添加到现有的索引计算的,从而代替“1.52”(为一个线是36个字符长)要“1.0 + 52chars”新的索引。例如:

def concord(self, event): 
    ... 
    for word_found in word_concord: 
     start = self.string_text.index("1.0+%d chars" % word_found.start()) 
     end = self.string_text.index("1.0+%d chars" % word_found.end()) 
     self.string_text.tag_add('color', start, end) 
    ... 
+0

哇,非常感谢您的帮助,Bryan Oakley。这是完美的。 –