python pyqt4 qlistwidget

python - PyQt4: ¿Cómo iterar todos los elementos en un QListWidget?



(6)

Al igual que una nota para otros que aterrizan aquí y buscan la misma información sobre PyQt5, aquí es ligeramente diferente.

Como el usuario indicó anteriormente para PyQt4, aún puede indexar directamente un elemento usando:

item_at_index_n = list_widget.item(n)

Pero para adquirir una lista de elementos para la iteración, usar una cadena vacía y el indicador MatchRegExp parece que ya no funciona.

Una forma de hacer esto en PyQt5 es:

all_items = list_widget.findItems(''*'', PyQt5.Qt.MatchWildcard)

Todavía me estoy familiarizando con PyQt, así que puede que haya una forma más sencilla / simple / elegante de la que simplemente no he encontrado todavía. Pero espero que esto ayude!

Actualmente, uso el siguiente bucle while en una clase que hereda QtGui.QListWidget para iterar todos los elementos:

i = 0 while i < self.count(): item = self.item(i) i += 1

Esperaba poder usar:

for item in self.items():

pero el método items () quiere un objeto QMimeData que no sé cómo construir para devolver todos los elementos. ¿Hay un enfoque más limpio que mi bucle while arriba?


Sé que esto es antiguo pero, acabo de encontrar una función findItems (texto, Qt.MatchFlags) en QListWidget. Por lo tanto, para iterar todos los elementos:

#listWidget is a QListWidget full of items all_items = listWidget.findItems('''', QtCore.Qt.MatchRegExp) for item in all_items: print item

Y haz lo que necesites con el item =)


Solo para agregar mis 2 centavos, ya que estaba buscando esto:

itemsTextList = [str(listWidget.item(i).text()) for i in range(listWidget.count())]


Tampoco sé qué es con el tipo MIME, y tampoco pude encontrar un método conveniente. Pero podrías escribir un método simple como este y listo:

def iterAllItems(self): for i in range(self.count()): yield self.item(i)

Es incluso perezoso (un generador).


items = [] for index in range(self.listWidget.count()): items.append(self.listWidget.item(index))

Si desea obtener el texto de los artículos.

for item in items: print(item.text())


items = [] for index in xrange(self.listWidget.count()): items.append(self.listWidget.item(index))