2017-12-18 4 views
0

Ich benutze PySide2 und möchte eine QListView nach einem Wert suchen und diese Zeile ausgewählt haben. Wie Sie können mit .findText(string_to_search_for) auf einer QComboBox. Wie kann ich in einer Qlistview nach einem Wert suchen und den Index zurückgeben lassen?Index des Wertes in Qlistview finden

einige zusätzliche Informationen:

Das Modell meiner QListView ist die Umsetzung von QAbstractTableModel ich geschrieben habe. Das Modell ist mit Daten aus einer Datenbank gefüllt, in der ersten Spalte die ID und in der zweiten Spalte der Name des Datenbankelements. Die QListView zeigt nur die zweite Spalte an. Dies ist mein Code für das QTableModel.

from PySide2 import QtGui,QtCore 

class TwoColumnTableModel(QtCore.QAbstractTableModel): 

    def __init__(self, row_data=[], column_data=[], parent=None): 
     QtCore.QAbstractTableModel.__init__(self, parent) 
     self.row_data = row_data 
     self.column_data = column_data 

    def rowCount(self, parent): 
     return len(self.row_data) 

    def columnCount(self, parent): 
     return len(self.column_data) 

    def flags(self, index): 
     return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable 

    def data(self, index, role): 

     if role == QtCore.Qt.DisplayRole: 

      row = index.row() 
      column = index.column() 
      value = self.row_data[row][column] 
      self.dataChanged.emit(row, column, []) 
      return value 

    def headerData(self, section, orientation, role): 

     if role == QtCore.Qt.DisplayRole: 

      if orientation == QtCore.Qt.Horizontal: 
       if section < len(self.column_data): 
        return self.column_data[section] 
       else: 
        return "TEMP COL" 


    def insertRows(self, position, rows, data=[], parent=QtCore.QModelIndex()): 
     self.beginInsertRows(parent, position, position + rows - 1) 

     for i in range(len(data)): 

      columns = [] 
      row_column1 = data[i][0] 
      row_column2 = data[i][1] 

      columns.insert(0, row_column1) 
      columns.insert(1, row_column2) 

      self.row_data.insert(position, columns) 

     self.endInsertRows() 

     return True 

    def removeRows(self, position, rows, parent=QtCore.QModelIndex()): 
     self.beginRemoveRows() 

     for i in range(rows): 
      value = self.row_data[position] 
      self.row_data.remove(value) 
     self.endRemoveRows() 

     return True 
+0

QListView - ist eine "View" -Klasse, die Daten aus einer "Model" -Klasse anzeigt und QAbstractItemModel erweitert. Welche Art von Modell verwenden Sie, um Ihre Ansicht mit Daten zu versorgen? Die Methode find sollte in der von Ihnen verwendeten Modellklasse implementiert werden. – MihanEntalpo

+0

Zeigen Sie Ihren Code. – eyllanesc

+0

@MihanEntalpo Ich benutze ein QTableModel, ich habe meinen Beitrag bearbeitet, um den Code einzuschließen. –

Antwort

0

landete ich die folgende Funktion in QTableModel Klasse erstellen:

def find_index_of_value(self, search_string, search_column): 

    for index in range(self.rowCount(None)): 
     model_index = self.index(index, 1) 
     index_value = self.data(model_index, search_column) 
     if index_value == search_string: 
      return model_index 

Die „search_string“ ist die Zeichenfolge ich suche und die „search_column“ ist die Säule des Modells, wo i möchte nach dieser Zeichenfolge suchen. Mit dem Return-Index kann ich den setCurrentIndex (index) auf meiner QListView verwenden und das war's.

Verwandte Themen