Получить один элемент за раз в QListWidget

У меня есть QListWidget и QPushButton. Предположим, что мой QListWidget содержит следующее:

  • яблоко
  • груша
  • банан
  • персик
  • нести

Я пытаюсь добиться, чтобы каждый клик QPushButton возвращал мне имя отдельного элемента в списке. Например.

  • Первый клик вернет мне "яблоко",
  • Второй клик вернет мне "груша",
  • ...
  • Пятый клик вернет мне "медведь"
  • И на шестом щелчке, он должен вернуть мне "яблоко" снова вместо завершения итерации

В настоящее время я могу вернуть только 5 элементов в QListWiget, используя этот код:

items = [obj.text() for obj in my_list.findItems(
        '', QtCore.Qt.MatchContains)
        ]

Я пытался с помощью for item in items:...всякий раз, когда я нажимаю на кнопку, он все равно возвращает мне все 5 пунктов.

Как мне этого добиться?

1 ответ

Решение

Вы должны создать круговой счетчик, который увеличивается каждый раз, когда вы нажимаете, и использовать item() который возвращает желаемый элемент, то мы используем text()

from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QListWidget, QApplication, QListWidgetItem

import sys

class Widget(QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent=parent)
        layout = QVBoxLayout(self)
        btn = QPushButton("btn", self)

        btn.clicked.connect(self.onClicked)
        layout.addWidget(btn)
        self.listWidget = QListWidget(self)
        layout.addWidget(self.listWidget)
        elements = ['apple', 'pear', 'banana', 'peach', 'bear']
        for element in elements:
            self.listWidget.addItem(element)

        self.counter = 0

    def onClicked(self):
        print(self.listWidget.item(self.counter).text())
        self.counter = (self.counter +1) % self.listWidget.count()




app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())

введите описание изображения здесь

Выход:

apple
pear
banana
peach
bear
apple
pear
banana
peach
bear
apple
Другие вопросы по тегам