在QListWidget中一次获取一个项目

时间:2017-03-23 19:19:35

标签: python pyqt qlistwidget qlistwidgetitem

我有一个QListWidget和一个QPushButton。 假设我的QListWidget包含如下:

  • 苹果
  • 香蕉

我正在尝试实现每个QPushButton单击将返回列表中单个项目的名称。 例如。

  • 首次点击会返回我' apple',
  • 第二次点击会返回我' pear',
  • ...
  • 第五次点击会返回我'熊'
  • 在第六次点击时,它将返回我&apple; apple'再次而不是结束迭代

目前我只能使用以下代码返回QListWiget中的所有5个项目:

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

我尝试使用for item in items:...,每当我点击按钮时,它仍会返回所有5个项目。

我该如何实现这个目标?

1 个答案:

答案 0 :(得分: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_())

enter image description here

输出:

apple
pear
banana
peach
bear
apple
pear
banana
peach
bear
apple