先创建搜索框,这里的wx.TE_PROCESS_ENTER会使搜索框接收回车事件,
self.search = wx.SearchCtrl(self.right_board, -1, style=wx.TE_PROCESS_ENTER,size=(130,-1))
self.search.SetHint('Search') # 设置Hint
Bind一下回车和执行的操作函数self.search_text()
self.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN,self.search_text)
在__init__定义几个变量
self.search_result = []
self.pre_search_selection = 0
self.pre_keyword = ''
这里最后的实现效果可以循环展示搜索结果
def search_text(self, event):
print('搜索文本!')
keyword = event.GetString()
if keyword == self.pre_keyword:
if self.pre_search_selection == len(self.search_result)-1:
self.pre_search_selection = 0
else:
self.pre_search_selection += 1
else:
self.pre_keyword = keyword
text = self.text.GetValue()
self.search_result = [i.span() for i in re.finditer(keyword, text)]
self.pre_search_selection = 0
if self.search_result:
info_text = '{0}/{1}个匹配项'.format(str(self.pre_search_selection+1), str(len(self.search_result)))
self.search_info.SetLabelMarkup("<span color='GREY'>"+info_text+"</span>")
self.text.SetSelection(*self.search_result[self.pre_search_selection])
else:
info_text = '0个匹配项'
self.search_info.SetLabelMarkup("<span color='GREY'>" + info_text + "</span>")
最后可以实现如下图的效果