【问题标题】:PyQT - QlistWidget with infinite scrollPyQT - 无限滚动的 QlistWidget
【发布时间】:2020-10-16 15:01:04
【问题描述】:

我有一个 QlistWidget,我需要在这个上实现一个无限滚动,类似于这个 HTML 示例:

https://scrollmagic.io/examples/advanced/infinite_scrolling.html

基本上,当用户滚动到列表的最后一项时,我需要加载更多的项并动态地将其附加到 QlistWidget 中。

有可能吗?我还没有找到任何示例。

【问题讨论】:

  • 通常在 Stack Overflow 上,人们会在问题中包含他们已经尝试过的内容以及遇到困难的地方。 Qt5 documentation is actually 挺全面的,而且pyqt5是近100%直接翻译原生c++。
  • 我没有在这里贴任何代码,并不代表我还没有尝试过。我真的被困住了..否则我不需要在这里寻求帮助。
  • 我正在寻找一些滚动事件,在 qlistwidget 类上,但我发现只是一个方法,它不能在用户滚动时触发,它只有在用户点击时才有效.. Obs:我没有'不要求任何代码,我只需要概念上的帮助,以寻找正确的方法。

标签: python pyqt pyqt5 qlistwidget


【解决方案1】:

可能有很多方法可以完成这项任务,但我发现最简单的方法是观察滚动条的变化,并在向列表小部件添加更多项目之前检测我们是否位于底部。

import sys, random
from PyQt5.QtWidgets import QApplication, QListWidget

class infinite_scroll_area(QListWidget): #https://doc.qt.io/qt-5/qlistwidget.html
    def __init__(self):
        super().__init__() #call the parent constructor if you're overriding it.
        #connect our own function the valueChanged event
        self.verticalScrollBar().valueChanged.connect(self.valueChanged) 
        self.add_lines(15)
        self.show()
    
    def valueChanged(self, value): #https://doc.qt.io/qt-5/qabstractslider.html#valueChanged
        if value == self.verticalScrollBar().maximum(): #if we're at the end
            self.add_lines(5)
    
    def add_lines(self, n):
        for _ in range(n): #add random lines
            line_text = str(random.randint(0,100)) + ' some data'
            self.addItem(line_text)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = infinite_scroll_area()
    sys.exit(app.exec_())

您可以通过覆盖QListWidgetwheelEvent 方法来直接获取滚轮事件,然后执行那里的逻辑以解决没有足够列表项以显示滚动条的潜在问题。如果不存在,则无法更改值,并且事件无法触发。然而,它引入了一个新问题,因为使用鼠标滚轮滚动并不是滚动视图的唯一方法(箭头键、向上/向下翻页键等)。随着任何 gui 库中类和子类的数量,必须真正熟悉文档。有点不方便,它对 python 没有那么全面,但我认为 c++ 文档就 gui 库文档而言是首屈一指的。

【讨论】:

  • 我试过verticalScrollBar().valueChanged,效果很好。感谢您的帮助。
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 2019-04-02
  • 2021-04-26
  • 2013-04-22
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多