web-dev-qa-db-ja.com

PyQt4:QListWidgetのすべてのアイテムをどのように反復しますか

現在、QtGui.QListWidgetを継承するクラスで次のwhileループを使用して、すべての項目を反復処理しています。

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

        i += 1

私が使用できることを望んでいました:

for item in self.items():

しかし、items()メソッドは、すべてのアイテムを返すように構築する方法がわからないQMimeDataオブジェクトを必要としています。上記のwhileループよりもクリーンなアプローチはありますか?

23
M J

MIMEタイプについてもわかりませんし、便利なメソッドも見つかりませんでした。しかし、次のような単純なメソッドを記述して実行できます。

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

それは怠惰です(ジェネレーター)。

20
user395760

私がこれを探していたので、ちょうど私の2セントを追加します。

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

私はこれが古いことを知っていますが、QListWidgetで関数 findItems(text、Qt.MatchFlags) を見つけました。したがって、すべてのアイテムを反復するには:

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

そして、あなたはアイテムで必要なことを何でもしてください=)

10
Diego Ponciano
items = []
for index in xrange(self.listWidget.count()):
     items.append(self.listWidget.item(index))
7
sam

PyQt5について同じ情報を求めてここに着陸した他の人へのメモと同じように、ここでは少し異なります。

ユーザー Pythonic が上記のPyQt4で述べられているので、次のコマンドを使用して項目に直接インデックスを付けることができます。

item_at_index_n = list_widget.item(n)

しかし、反復のためにアイテムのリストを取得するために、空の文字列とMatchRegExpフラグを使用することはもう機能していないようです。

PyQt5でこれを行う1つの方法は次のとおりです。

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

私はまだPyQtに慣れているので、まだまだ出会っていない、より簡単、より簡単、よりエレガントな方法があるかもしれません。しかし、これが役に立てば幸いです!

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

アイテムのテキストを取得したい場合

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