我正在制作一个和弦工具,我想用颜色突出显示所有结果。在下面的代码中,它仅适用于第一行。当有新行时,标签将会中断。例如,当我搜索单词' python'在下面的字符串中,标记仅突出显示第一行。它不适用于第二行和第三行。求你帮帮我。
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 :(得分: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)
...