PyQt4:QListWidget 内のすべての項目を反復するにはどうすればよいですか
-
08-10-2019 - |
質問
現在、QtGui.QListWidget を継承するクラスで次の while ループを使用して、すべての項目を反復処理しています。
i = 0
while i < self.count():
item = self.item(i)
i += 1
私は次のものを使用できることを期待していました:
for item in self.items():
しかし、 items() メソッドには QMimeData オブジェクトが必要ですが、すべての項目を返すように構築する方法がわかりません。上記の while ループよりもクリーンなアプローチはありますか?
解決
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())]
私はこれが古いことを知っていますが、私はちょうど機能を見つけました findItems(テキスト、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に関する同じ情報を求めてここに上陸する他の人のためのメモと同じように、ここでは少し異なります。
ユーザーとして Pythonic Pyqt4については、以下を使用してアイテムを直接インデックスすることができます。
item_at_index_n = list_widget.item(n)
しかし、反復のためのアイテムのリストを取得するには、空の文字列とMatchRegexpフラグを使用しても機能しないようです。
Pyqt5でこれを行う1つの方法は次のとおりです。
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())
所属していません StackOverflow