突出显示Tkinter中的某些字符

时间:2015-09-28 11:02:07

标签: python tkinter

我在Python 3.4和Tkinter中创建了一个简单的文本编辑器。目前,我仍然坚持find功能。

我可以成功找到角色,但我不确定如何突出它们。我没有成功尝试过标记方法,错误:

str object has no attribute 'tag_add'. 

这是我的查找功能代码:

def find(): # is called when the user clicks a menu item
    findin = tksd.askstring('Find', 'String to find:')
    contentsfind = editArea.get(1.0, 'end-1c') # editArea is a scrolledtext area
    findcount = 0
    for x in contentsfind:
        if x == findin:
            findcount += 1
            print('find - found ' + str(findcount) + ' of ' + findin)
    if findcount == 0:
        nonefound = ('No matches for ' + findin)
        tkmb.showinfo('No matches found', nonefound)
        print('find - found 0 of ' + findin)

用户将文本输入到scrolledtext字段中,我想突出显示该scrolledtext区域上的匹配字符串。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:1)

使用tag_add向区域添加标记。此外,您可以使用窗口小部件的search方法,而不是获取所有文本并搜索文本。我将返回匹配的开头,并且还可以返回匹配的字符数。然后,您可以使用该信息添加标记。

它看起来像这样:

...
editArea.tag_configure("find", background="yellow")
...

def find():
    findin = tksd.askstring('Find', 'String to find:')

    countVar = tk.IntVar()
    index = "1.0"
    matches = 0

    while True:
        index = editArea.search(findin, index, "end", count=countVar)
        if index == "": break

        matches += 1
        start = index
        end = editArea.index("%s + %s c" % (index, countVar.get()))
        editArea.tag_add("find", start, end)
        index = end