2014-01-17 76 views
0

过滤我对如何从ListWidget通过下拉框选择筛选项目问题清单,qcombobox和QLineEdit的

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

我想,你有它的要点,如果用户在组合框中选择红色选项,ListWidget将显示红色01,红色02 ,红色03 ...而其他2种选项也是如此。

有人可以指导我在这件事情?

顺便说一句,出于好奇,如果我要整合另一个文本字段(QLineEdit),总共3个项目,并且它的工作方式与组合框相同,那么可以这样做吗?

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

+0

我不熟悉Python。 你可以用字符串作为键和字符串列表的值作为值吗?然后,您可以使用选定的字符串并显示相应的值... –

+0

您好,我并没有真正明白您的意思......我对Python语言也很新颖。嗯,你可以详细解释一下吗? – yan

+0

在python中它叫[dictionary](http://docs.python.org/2/library/stdtypes.html#typesmapping)。关键是'QString',值是'QVector '。然后,您可以将组合框字符串作为键,并从适当的值中获取listwidget entrys。 –

回答

1

假设您创建了一个用户界面文件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_()) 
+0

嗨Frodon,谢谢你回到我身边。我有一个问题,我推测你的编码意味着我必须手动输入吗?比如我需要定义在组合框中选择了黄色时,我必须在updateList下输入包含黄色的所有单词? 对吗? – yan

+0

我的例子中已经完成了过滤操作。你只需要重写getFilters和getListItems方法来用你自己的数据填充组合框和listWidget。例如,listWidget的值可以是目录内容(目录和文件)。这是由你来写这部分。 – Frodon