Search code examples
python-2.7pyqt4

How to search an item in list widget using with pyqt4


Here in my sample program,I want to display the lot of names in list widget.In that, I want to search a particular item in list widget using search button,and I want to print that item name in list widget.

Given below is my code:

import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):
        auto_search_vbox = QtGui.QVBoxLayout(self)
        hbox=QtGui.QHBoxLayout()
        le_search = QtGui.QLineEdit()
        se_btn = QtGui.QPushButton("Search")
        se_btn.clicked.connect(self.find_item)
        hbox.addWidget(le_search)
        hbox.addWidget(se_btn)
        auto_search_vbox.addLayout(hbox)
        self.listwidget = QtGui.QListWidget()
        self.total_list =["machine","printer","xerox bundles"]
        self.listwidget.addItems(self.total_list)
        auto_search_vbox.addWidget(self.listwidget)

        self.show()
    def find_item(self):
        out = self.listwidget.findItems("mac", QtCore.Qt.MatchExactly)
        print out   
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

Solution

  • Sorry, I have PyQt5. Try it:

    flags Qt::MatchFlags

    This enum describes the type of matches that can be used when searching for items in a model.

    import sys
    #from PyQt4.QtGui  import *
    #from PyQt4.QtCore import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore    import *
    from PyQt5.QtGui     import *
    
    class Example(QWidget):
        def __init__(self):
            super(Example, self).__init__()
            self.initUI()
            
        def initUI(self):
            
            self.le_search = QLineEdit()                            # self.   +++
            
            se_btn    = QPushButton("Search")
            se_btn.clicked.connect(self.find_item)
            
            self.listwidget = QListWidget()
            self.total_list = ["machine", "mac1", "printer", "Printer","xerox bundles", "2mac"]
            self.listwidget.addItems(self.total_list)        
    
            hbox      = QHBoxLayout()        
            hbox.addWidget(self.le_search)                          # self.   +++
            hbox.addWidget(se_btn)
            
            auto_search_vbox = QVBoxLayout(self)
            auto_search_vbox.addLayout(hbox)
            auto_search_vbox.addWidget(self.listwidget)
    
        def find_item(self):
    #        out = self.listwidget.findItems("mac", QtCore.Qt.MatchExactly)          # ---
    #        out = self.listwidget.findItems(self.le_search.text(), Qt.MatchExactly)  
            out = self.listwidget.findItems(self.le_search.text(), 
                                            Qt.MatchContains |          # +++
                                            Qt.MatchCaseSensitive)      # +++
            
            print("out->", [ i.text() for i in out ] ) 
            
            
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        ex.show()
        sys.exit(app.exec_())
    

    enter image description here