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_())
可能有很多方法可以完成这项任务,但我发现最简单的方法是观察滚动条中的更改,并在向列表小部件添加更多项目之前检测我们是否在底部
您可以通过重写} 方法直接获取滚轮事件,然后执行其中的逻辑,从而解决在开始时没有足够的列表项来显示滚动条的潜在问题。如果它不在那里,它就不能更改值,事件也不能触发。但是,它引入了一个新问题,因为使用鼠标滚轮滚动并不是滚动视图的唯一方式(箭头键、页面上/下键等)。由于任何gui库中都有大量的类和子类,因此必须真正熟悉文档。对于Python来说,它并不是那么全面,但我认为C++文档是GUI库文档中最重要的。p>
QListWidget
的^{相关问题 更多 >
编程相关推荐