具有无限滚动的PyQT QlistWidget

2024-10-03 00:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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


Tags: 用户httpsio示例列表html动态examples
1条回答
网友
1楼 · 发布于 2024-10-03 00:16:41

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

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_())

您可以通过重写QListWidget^{}方法直接获取滚轮事件,然后执行其中的逻辑,从而解决在开始时没有足够的列表项来显示滚动条的潜在问题。如果它不在那里,它就不能更改值,事件也不能触发。但是,它引入了一个新问题,因为使用鼠标滚轮滚动并不是滚动视图的唯一方式(箭头键、页面上/下键等)。由于任何gui库中都有大量的类和子类,因此必须真正熟悉文档。对于Python来说,它并不是那么全面,但我认为C++文档是GUI库文档中最重要的。p>

相关问题 更多 >