Tkinter Text 查找文字
在Text控件内可以使用search( )方法查找指定的字符串,这个方法会传回找到第一个指定字符串的索引位置。假设Text控件的对象是text,它的语法如下。
pos=text.search(key, startindex, endindex)
(1)pos:传回所找到的字符串的索引位置,如果查找失败则传回空字符串。
(2)key:所查找的字符串。
(3)startindex:查找起始位置。
(4)endindex:查找结束位置,如果查找到文档最后可以使用END。
示例1
查找文字的应用,所查找到的文字将用黄色底显示。
from tkinter import *
def mySearch():
text.tag_remove("found","1.0",END)
start = "1.0"
key = entry.get()
if (len(key.strip()) == 0):
return
while True:
pos = text.search(key,start,END)
# print("pos= ",pos) # pos= 3.0 pos= 4.0 pos=
if (pos == ""):
break
text.tag_add("found",pos,"%s+%dc" %(pos,len(key)))
start = "%s+%dc" % (pos,len(key))
# print("start= ",start) # start= 3.0+3c start= 4.0+3c
root = Tk()
root.title("apidemos.com")
root.geometry("300x180")
root.rowconfigure(1,weight=1)
root.columnconfigure(0,weight=1)
entry = Entry()
entry.grid(row=0,column=0,padx=5,sticky=W+E)
btn = Button(root,text="Find",command=mySearch)
btn.grid(row=0,column=1,padx=5,pady=5)
# 建立Text
text = Text(root,undo=True)
text.grid(row=1,column=0,columnspan=2,padx=3,
pady=5,sticky=N+S+W+E)
text.insert(END,"Five Hundred Miles\n") # 插入时同时设置Tag
text.insert(END,"If you miss the rain I'm on,\n")
text.insert(END,"You will know that I am gone.\n")
text.insert(END,"You can hear the whistle blow\n")
text.insert(END,"A hundred miles,\n")
text.tag_configure("found", background="yellow")
root.mainloop()
输出:
对读者而言,陌生的第一个程序代码是第12行:
pos = text.search(key,start,END)
这个程序代码会查找key关键词,所查找的范围是text控件内容start索引至文件结束,若是查找到会传回key关键词出现的索引位置给pos。读者陌生的第二个程序代码是第15、16行,如下所示。
text.tag_add("found",pos,"%s+%dc" %(pos,len(key)))
start = "%s+%dc" % (pos,len(key))
上述第15行pos是加入标签的起始位置,标签的结束位置是一个索引的表达式。
"%s+%dc" % (pos,len(key))
上述是所查找到字符串的结束索引位置,相当于是pos位置加上key关键词的长度。程序第16行则是更新查找起始位置,为下一次查找做准备。