wxPython comboBox实现自动提示功能

最近在使用python做一个桌面应用,使用到了ComboBox这个控件,但是对于这个控件的想法是能够实现类似于百度搜索框的功能,输入相应的搜索内容,能够显示下拉列表,下拉列表中显示相关的提示信息。


#! /usr/bin/env python3


import wx

class SearchComboBox(wx.ComboBox):
    def __init__(self, parent, choices,style):
        super(SearchComboBox, self).__init__(parent = parent, choices = choices, style = style)
        self.choices = choices
        self.initUI()
    
    def initUI(self):
        self.ignoreEvtText = False
        self.Bind(wx.EVT_TEXT, self.textChange)
    
    def textChange(self, event):
        if self.ignoreEvtText:
            return
        currentText = event.GetString()
        #这里先判断内容是否为空,如果为空的话,需要让下拉菜单隐藏起来
        if currentText=='':
            self.SetItems(self.choices)
            self.Dismiss()
        
        
        currentText = event.GetString()
        found = False
        choiceTemp = []
        for path in self.choices:
            if currentText.lower() in path.lower():
                found = True
                choiceTemp.append(path)
    
        if found:
            self.ignoreEvtText = True
            self.SetItems(choiceTemp)
            self.Popup()
            self.SetValue(currentText)
            self.SetInsertionPoint(len(currentText))
            self.ignoreEvtText = False
        if not found:
            self.Dismiss()
            self.SetInsertionPoint(len(currentText))
            event.Skip()

重设数据源self.SetItems过后文本框也会被清空,所以self.SetValue(currentText)将文本重新设置回去,但是会遇到递归死掉的问题,没找到其他解决方式,使用 ignoreEvtText标志规避了无限递归的问题

USE

pathCache = ["awd","fegseg","grgr"] 
self.path_text = XKSearchCombo.SearchComboBox(panel,choices = pathsCache,style = wx.CB_DROPDOWN)
self.path_text.SetValue("")
wxPython comboBox实现自动提示功能_第1张图片
image.png

你可能感兴趣的:(wxPython comboBox实现自动提示功能)