有没有办法使tkinter中的.search在单词中找不到单词?

时间:2019-08-12 14:26:24

标签: python tkinter

我正在构建一个程序,该程序在用户编写文本小部件时突出显示某些单词。

到目前为止,所有程序都可以正常工作,只是该程序会在单词中突出显示单词,而且我不知道如何使其不这样做。

from tkinter import *

root = Tk()
frame = Frame(root)
frame.grid(row=0, column=0, sticky="nsew")
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

textbox = Text(frame,width=100, height=10)
textbox.grid(row=1, column=7, columnspan=10)

textbox.tag_config("vegetables", foreground='green')
textbox.tag_config("fruits", foreground='red')

def search(textbox, keyword, tag):
    pos = '1.0'
    while True:
        idx = textbox.search(keyword, pos, END, nocase=True)
        if not idx:
            break
        pos = '{}+{}c'.format(idx, len(keyword))
        textbox.tag_add(tag, idx, pos)


def search2(event):
    for word in vegetables:
        search(textbox, word, "vegetables")
    for word in fruits:
        search(textbox, ordet, "fruits")

textbox.bind("<space>", search2)

frame.mainloop()

我在这里使用“蔬菜”和“水果”作为示例,以使程序的功能更直观。

我要解决的问题可以通过以下句子来说明,该句子说明了程序如何在另一个单词中识别出蔬菜,这意味着其他含义:

“我想要的只是豌豆地上的ce”

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

添加regexp=True选项,然后使用\y匹配单词边界。

def search(textbox, keyword, tag):
    pos = '1.0'
    while True:
        idx = textbox.search(fr'\y{keyword}\y', pos, END, nocase=True, regexp=True)
        if not idx:
            break
        pos = '{}+{}c'.format(idx, len(keyword))
        textbox.tag_add(tag, idx, pos)