使用qcombobox和qlineedit列出过滤

时间:2014-01-17 07:03:48

标签: pyqt4 filtering qlistwidget qcombobox

我有一个关于如何通过组合框选择从ListWidget过滤项目的问题

例如,在我的ListWidget中,有黄色01,黄色02,蓝色01,红色01,红色02和红色03 在我的组合框中,有黄色,蓝色和红色

我想,你得到了它的要点,如果用户在组合框中选择Red,ListWidget将显示Red 01,Red 02,Red 03 ......其他2个选项也是如此。< / p>

有人可以指导我这件事吗?

顺便说一句,出于好奇,如果我要整合另一个文本字段(QLineEdit),共计3个项目并使其与组合框的功能相同,是否可以完成?

P.S:我的信息是从目录中读取的,因此它有点棘手,我想

1 个答案:

答案 0 :(得分:1)

假设您使用设计器创建了一个ui文件myDialog.ui。 QListWidget和QComboBox被称为comboBoxlistWidget。 要更新你的QListWidget,我建议采用这种方法:

#!/usr/bin/env python
# -*- coding: utf-8 *-

import sys
import os

from PyQt4 import QtGui, QtCore, uic

app = QtGui.QApplication(sys.argv)

class MyDialog(QtGui.QDialog):
  def __init__(self):
    QtGui.QDialog.__init__(self)
    uic.loadUi(os.path.join(os.path.dirname(os.path.abspath(__file__)),"myDialog.ui"), self)
    self.comboBox.currentIndexChanged.connect(self.updateList)
    self.comboBox.clear()
    self.comboBox.insertItems(0,self.getFilters())
    self.updateList()
    pass

  def updateList(self):
    items = self.getListItems()
    text_filter = str(self.comboBox.currentText())
    self.listWidget.clear()
    # If "All" is used, no filter is applied
    self.listWidget.insertItems(0,[text for text in items if text_filter in text + "All"])
    pass

  def getFilters(self):
    # Write here your own method to retrieve the filters
    return ["Yellow", "Blue", "Red", "All"]

  def getListItems(self):
    # Write here your own method to retrieve the list values
    return ["Yellow 01", "Yellow 02", "Blue 01", "Red 01", "Red 02", "Red 03 "]

myDialog = MyDialog()
myDialog.show()
sys.exit(app.exec_())