【问题标题】:Get one item at a time in QListWidget在 QListWidget 中一次获取一项
【发布时间】:2017-08-16 13:04:07
【问题描述】:

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

  • 苹果
  • 香蕉
  • 桃子

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

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

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

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

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

我应该如何做到这一点?

【问题讨论】:

    标签: python pyqt qlistwidget qlistwidgetitem


    【解决方案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
    

    【讨论】:

    • 这行得通,谢谢!顺便说一句,我对(self.counter +1) % self.listWidget.count() 有点困惑/好奇,当你有%s 等时使用afaik %(在新格式样式中 - 使用.format),所以它在哪里/哪个变量'替换'?
    • a % b 计算ab 之间除法的余数,例如9 % 4 = 1
    • 啊...是的,我忘记了 % 也用于此类操作。继续认为它仅且仅用于打印语句或%s
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2018-04-22
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多