我在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区域上的匹配字符串。
我将如何做到这一点?
答案 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