PYQT4: Как вы повторяете все предметы в QlistWidget
-
08-10-2019 - |
Вопрос
В настоящее время я использую следующее во время цикла в классе, который наследует Qtgui.qlistwidget для итерации всех предметов:
i = 0
while i < self.count():
item = self.item(i)
i += 1
Я надеялся, что смогу использовать:
for item in self.items():
Но метод элементов () хочет, чтобы объект Qmimedata, который я не знаю, как построить, чтобы вернуть все элементы. Есть ли более чистый подход, чем мой петля выше?
Решение
Я не знаю, что это с типом MIME, и я тоже не мог найти удобный метод. Но вы можете написать простой метод, как это и сделать:
def iterAllItems(self):
for i in range(self.count()):
yield self.item(i)
Это даже ленивый (генератор).
Другие советы
Просто добавить мои 2 цента, как я искал это:
itemsTextList = [str(listWidget.item(i).text()) for i in range(listWidget.count())]
Я знаю, что это старый, но я только что узнал функцию FinditTems (текст, Qt.matchflags) в Qlistwidget. Итак, чтобы повторить все предметы:
#listWidget is a QListWidget full of items
all_items = listWidget.findItems('', QtCore.Qt.MatchRegExp)
for item in all_items:
print item
И делать все, что вам нужно с предметом =)
items = []
for index in xrange(self.listWidget.count()):
items.append(self.listWidget.item(index))
Так же, как записка для других приземляющихся здесь ищет ту же информацию о PYQT5, здесь немного отличается.
Как пользователь Питон Указано выше для PYQT4, вы все равно можете напрямую индексировать элемент, используя:
item_at_index_n = list_widget.item(n)
Но приобретать список предметов для итерации, используя пустую строку и флаг MatchregeXP, кажется, больше не работает.
Один из способов сделать это в PYQT5:
all_items = list_widget.findItems('*', PyQt5.Qt.MatchWildcard)
Я все еще доставляюсь, чтобы похваться с PYQT, поэтому вполне может быть легче / проще / более элегантный способ, которым я просто не наткнулся. Но я надеюсь, что это поможет!
items = []
for index in range(self.listWidget.count()):
items.append(self.listWidget.item(index))
Если ваше желание получить текст предметов
for item in items:
print(item.text())