#!/usr/bin/env python

# -*- coding: utf-8 -*-

from PyQt4.QtCore import Qt

from PyQt4.QtGui import QCompleter, QComboBox, QSortFilterProxyModel

class ExtendedComboBox(QComboBox):

def __init__(self, parent=None):

super(ExtendedComboBox, self).__init__(parent)

self.setFocusPolicy(Qt.StrongFocus)

self.setEditable(True)

# add a filter model to filter matching items

self.pFilterModel = QSortFilterProxyModel(self)

self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive)

self.pFilterModel.setSourceModel(self.model())

# add a completer, which uses the filter model

self.completer = QCompleter(self.pFilterModel, self)

# always show all (filtered) completions

self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)

self.setCompleter(self.completer)

# connect signals

self.lineEdit().textEdited[unicode].connect(self.pFilterModel.setFilterFixedString)

self.completer.activated.connect(self.on_completer_activated)

# on selection of an item from the completer, select the corresponding item from combobox

def on_completer_activated(self, text):

if text:

index = self.findText(text)

self.setCurrentIndex(index)

# on model change, update the models of the filter and completer as well

def setModel(self, model):

super(ExtendedComboBox, self).setModel(model)

self.pFilterModel.setSourceModel(model)

self.completer.setModel(self.pFilterModel)

# on model column change, update the model column of the filter and completer as well

def setModelColumn(self, column):

self.completer.setCompletionColumn(column)

self.pFilterModel.setFilterKeyColumn(column)

super(ExtendedComboBox, self).setModelColumn(column)

if __name__ == "__main__":

import sys

from PyQt4.QtGui import QStringListModel, QApplication

app = QApplication(sys.argv)

string_list = ['hola muchachos', 'adios amigos', 'hello world', 'good bye']

combo = ExtendedComboBox()

# either fill the standard model of the combobox

combo.addItems(string_list)

# or use another model

#combo.setModel(QStringListModel(string_list))

combo.resize(300, 40)

combo.show()

sys.exit(app.exec_())

pyqt例子下拉列表的更多相关文章

  1. pyqt例子搜索文本

    #!/usr/bin/env python #-*- coding:utf-8 -*- import sip sip.setapi('QString', 2) sip.setapi('QVariant ...

  2. 关于struts值栈的总结,前端页面如何使用标签取得值栈中的数据

    用户提交一次请求的执行过程 总结: struts值栈中 两个内容 一个是栈 一个是map 值栈(数据中心)的范围是一个请求 它代替了request作用域 struts自定义标签有一个特点 比如遍历集合 ...

  3. python设计模式之命令模式

    python设计模式之命令模式 现在多数应用都有撤销操作.虽然难以想象,但在很多年里,任何软件中确实都不存在撤销操作.撤销操作是在1974年引入的,但Fortran和Lisp分别早在1957年和195 ...

  4. 第15.35节 PyQt编程实战:结合QDial实现的QStackedWidget堆叠窗口程序例子

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.案例说明 本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStack ...

  5. pyqt小例子 音乐盒

    源代码1: # -*- coding: utf-8 -*- import sys,time,os import ctypes from PyQt4 import QtCore, QtGui,Qt fr ...

  6. PyQt开发案例:结合QDial实现的QStackedWidget堆叠窗口程序例子及完整代码

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.案例说明 本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStack ...

  7. pyqt小例子 treewidget

    # -*- coding: cp936 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * class InlineEditor(QWid ...

  8. pyqt托盘例子

    # -*- coding: cp936 -*- #!/usr/bin/env python # -*- coding:utf-8 -*- from PyQt4 import QtCore, QtGui ...

  9. pyqt之倒计时例子

    from PyQt4.Qt import *from PyQt4.QtCore import *from PyQt4.QtGui import *import sysdef main():    a= ...

随机推荐

  1. Android学习笔记(二)之异步加载图片

    最近在android开发中碰到比较棘手的问题,就是加载图片内存溢出.我开发的是一个新闻应用,应用中用到大量的图片,一个界面中可能会有上百张图片.开发android应用的朋友可能或多或少碰到加载图片内存 ...

  2. RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny

     一,RTX51 Tiny简单介绍    RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的 ...

  3. C#,.net获取字符串中指定字符串的个数、所在位置与替换字符串

    方法一: public static int indexOf (字符串/字符,int从第几位开始,int共查几位) string tests = "1absjjkcbfka2rsbcfak2 ...

  4. Android WifiDirect 学习(三) 一些基础知识和问题

    P2P架构介绍 P2P架构中定义了三个组件,一个设备,两种角色.这三个组件分别是: P2P Device:它是P2P架构中角色的实体,读者可把它当做一个Wi-Fi设备. P2P Group Owner ...

  5. (原)torch的apply函数

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221633.html torch中的apply函数通过可以不断遍历model的各个模块.实际上其使用的 ...

  6. 如何用正则将多个空格看成一个空格结合spllit()方法将文本数据入库

    关键的代码和正则表达式在这里 while((line=br.readLine())!=null) { String[] data=new String[4]; data=line.split(&quo ...

  7. 解决jQuery中美元符号($)命名与别的js脚本库引用冲突方法

    在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg') 的写法.然而,当我们引入多个js库后,在另外一个js库 ...

  8. jq原创弹出层折叠效果

    弹出层效果很多网站上都用到,今天就整理最近项目里用到的一个小效果,点击折叠弹出一个层给用户填写信息.弹出层代码都是jq动态创建,每个人写法都不一样,需求也不一样,所有选择符合自已的即可. html: ...

  9. 3月22日 html(三)css样式表

    CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. 一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控制精确,但是可重用性差,冗余较多. 例 ...

  10. 关于exec命令函数

    exec执行某命令在命令行下没有问题,但是在php中就出错.这个问题99.99%与权限有关,但是exec执行的命令不会返回错误.一个技巧就是使用管道命令,假设你的exec调用如下: exec('con ...