Python查找函数每行选择一个匹配项

时间:2017-06-17 17:56:10

标签: python tkinter text-editor

我正在尝试使用python创建一个简单的文本编辑器。我现在正在尝试创建一个find函数。这就是我所拥有的:

def Find():
    text = textArea.get('1.0', END+'-1c').lower()
    input = simpledialog.askstring("Find", "Enter text to find...").lower()
    startindex = []
    endindex = []
    lines = 0
    if input in text:
        text = textArea.get('1.0', END+'-1c').lower().splitlines()
        for var in text:
            character = text[lines].index(input)
            start = str(lines + 1) + '.' + str(character)
            startindex.append(start)
            end = str(lines + 1) + '.' + str(character + int(len(input)))
            endindex.append(end)
            textArea.tag_add('select', startindex[lines], endindex[lines])
            lines += 1

    textArea.tag_config('select', background = 'green')

这将成功突出显示与绿色背景的用户输入相匹配的单词。但问题是,它只突出显示每一行的第一个匹配,正如您可以看到here

我希望它突出显示所有匹配。

此处的完整代码:https://pastebin.com/BkuXN5pk

1 个答案:

答案 0 :(得分:2)

建议使用文本小部件的内置搜索功能。使用python3显示。

from tkinter import *

root = Tk()
textArea = Text(root)
textArea.grid()
textArea.tag_config('select', background = 'green')

f = open('mouse.py', 'r')
content = f.read()
f.close()
textArea.insert(END, content)

def Find(input):
    start = 1.0
    length = len(input)
    while 1:
        pos = textArea.search(input, start, END)
        if not pos:
            break
        end_tag = pos + '+' + str(length) + 'c'
        textArea.tag_add('select', pos, end_tag)
        start = pos + '+1c'

Find('display')
root.mainloop()