2017-02-21 29 views
0

У меня есть QListView, который отображает список элементов, используя PyQt в Python. Как я могу заставить его возвращать определенный элемент qlistview при поиске?Как я могу найти Qlistview для поиска в pyqt

Например, если у меня есть следующие Qlistview с 4 элементами, как я могу получить элемент, который содержит text = dan? или довести его до вершины списка. Кроме того, поиск не обязательно должен быть полностью конкретным. Если я наберу «да», я бы хотел, чтобы он возвращал дан или элементы, которые начинаются с «да», и, возможно, доведите его до верхней части списка

QListWidget

Мой QListView определяется следующим образом:

from PyQt4 import QtCore, QtGui 
import os 
import sys 

class AppView(QtGui.QDialog): 

    def __init__(self, parent=None): 
     super(AppView, self).__init__(parent) 
     self.resize(400, 400) 
     self.ShowItemsList() 

    def ShowItemsList(self): 
     self.setWindowTitle("List") 
     buttonBox = QtGui.QDialogButtonBox(self) 
     buttonBox.setOrientation(QtCore.Qt.Horizontal) 
     buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok) 
     listview = QtGui.QListView(self) 

     verticalLayout = QtGui.QVBoxLayout(self) 
     verticalLayout.addWidget(listview) 
     verticalLayout.addWidget(buttonBox) 
     buttonBox.accepted.connect(self.close) 
     model = QtGui.QStandardItemModel(listview) 
     with open("names-list.txt") as input: 
      if input is not None: 
       item = input.readlines() 
      for line in item: 
       item = QtGui.QStandardItem(line) 
       item.setCheckable(True) 
       item.setCheckState(QtCore.Qt.PartiallyChecked) 
       model.appendRow(item) 

     listview.setModel(model) 
     listview.show() 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    view = AppView() 
    view.show() 
    sys.exit(app.exec_()) 

ответ

0

Я исправил это так. Я сделал моей модель переменной экземпляра, начинающейся с self, чтобы я мог получить к ней доступ из другой функции.

def searchItem(self): 
    search_string = self.searchEditText.text() # Created a QlineEdit to input search strings 
    items = self.model.findItems(search_string, QtCore.Qt.MatchStartsWith) 
    if len(items) > 0: 
     for item in items: 
      if search_string: 
       self.model.takeRow(item.row()) #take row of item 
       self.model.insertRow(0, item) # and bring it to the top 
    else: 
     print "not found"