0

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

  • 苹果
  • 香蕉

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

  • 第一次单击将返回我“苹果”,
  • 第二次点击将返回我'梨',
  • ...
  • 第五次点击将返回我“熊”
  • 在第六次点击时,它应该再次返回我“苹果”而不是结束迭代

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

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

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

我应该如何实现这一目标?

4

1 回答 1

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
于 2017-03-23T20:30:02.897 回答