wxpython comboBox 自动完成提示功能
来源:互联网 发布:翻译视频的软件 编辑:程序博客网 时间:2024/05/16 12:42
摘要
最近在使用python做一个桌面应用,使用到了ComboBox这个控件,但是对于这个控件的想法是能够实现类似于百度搜索框的功能,输入相应的搜索内容,能够显示下拉列表,下拉列表中显示相关的提示信息。google了半天有的功能只有自动补充完成,并不能够达到显示下拉列表的形式,一旦遇到多个联想词的时候就会有些问题。所以自己研究了下,在其原先的基础上稍微修改了下代码实现了这个功能。下面来看看代码吧
正文
# -*- coding: utf-8 -*-import wxclass PromptingComboBox(wx.ComboBox) : def __init__(self, parent, value, choices=[], style=0, **par): wx.ComboBox.__init__(self, parent, wx.ID_ANY, value, style=style|wx.CB_DROPDOWN, choices=choices, **par) self.choices = choices #分别绑定多个事件,文本内容变化,字符输入 self.Bind(wx.EVT_TEXT, self.EvtText) self.Bind(wx.EVT_CHAR, self.EvtChar) self.Bind(wx.EVT_COMBOBOX, self.EvtCombobox) self.ignoreEvtText = False def EvtCombobox(self, event): self.ignoreEvtText = True event.Skip() def EvtChar(self, event): #这里需要注意一点事,回车键如果不过滤掉的话,EvtText会类似于进入死循环,这里还不太清楚到底是为什么 if event.GetKeyCode() == 8: self.ignoreEvtText = True event.Skip() def EvtText(self, event): currentText = event.GetString() #这里先判断内容是否为空,如果为空的话,需要让下拉菜单隐藏起来 if currentText=='': self.SetItems(self.choices) self.Dismiss() if self.ignoreEvtText: self.ignoreEvtText = False return currentText = event.GetString() found = False choiceTemp = [] for choice in self.choices : if choice.startswith(currentText): self.ignoreEvtText = True found = True choiceTemp.append(choice) #进行文本匹配后,如果存在的话,就将combobox的内容置为匹配到的列表,再弹出下拉菜单 if found: print choiceTemp[0] 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()class TrialPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, wx.ID_ANY) choices = [u'中国', u'中文', u'中美', 'aunt', 'uncle', 'grandson', 'granddaughter'] cb = PromptingComboBox(self, "", choices, style=wx.CB_DROPDOWN) def derivedRelatives(self, relative): return [relative, 'step' + relative, relative + '-in-law']if __name__ == '__main__': app = wx.App() frame = wx.Frame (None, -1, 'Demo PromptingComboBox Control', size=(400, 200)) TrialPanel(frame) frame.Show() app.MainLoop()
以上就是全部的代码了。但是每输入一次就会闪烁一下,这还是有点小问题。
0 0
- wxpython comboBox 自动完成提示功能
- comboBox 自动完成搜索功能
- 具有自动完成功能的ComboBox
- ComboBox自动完成功能(Source)
- C# ComboBox自动完成功能的例子
- 另一个具有自动完成功能的ComboBox
- 自定义具有自动完成功能的ComboBox
- ComboBox自动完成功能的例子
- ComboBox自动完成功能的例子
- C# ComboBox自动完成功能的示例
- C# ComboBox自动完成功能的示例
- combobox,textbox 控件实现自动提示功能
- 具有自动完成功能的ComboBox(源码、原创)
- 自动完成Combobox小结
- 自动完成Combobox小结
- JQuery中自动完成提示功能
- Delphi编辑框自动提示完成功能
- 使用CodeIgniter框架完成自动提示功能
- cocos2d-x常见的报错(收集整理)
- iOS开发系列课程(07) --- 分栏视图控制器
- 华为手机Android开发调试时logcat不显示问题
- 排序算法
- php中 echo print print_r var_dump的区别
- wxpython comboBox 自动完成提示功能
- CSS层叠样式温故第一天
- Leet Code Medium 2 add two numbers
- PE格式详细讲解9– 导出表
- 置换元素(替换元素)和非置换元素(不可替换元素)
- POJ 1180 Batch Scheduling
- CSS3:简易的循环弹跳动画
- Linux命令备忘实例(8)——文件校验、分割与临时文件
- C++尽量不要使用#define