2014-05-07 44 views
0

我想在Python PyQt的我的QListWidget中加載一些非常大的文件的一部分。當用戶移動QListWidget的滾動條併到達滾動條的末尾時,事件正在激活,並且文件的下一部分正在加載(追加)到QListWidget。是否有一些事件用於控制滾動條的結束位置?Python PyQt滾動條在結束位置事件

回答

2

有沒有專門的信號 「滾動到結束」,但你可以很容易地檢查,在valueChanged信號:

def scrolled(scrollbar, value): 
    if value == scrollbar.maximum(): 
     print 'reached max' # that will be the bottom/right end 
    if value == scrollbar.minimum(): 
     print 'reached min' # top/left end 

scrollBar = listview.verticalScrollBar() 
scrollBar.valueChanged.connect(lambda value: scrolled(scrollBar, value)) 

編輯:

或者,在一個類中:

class MyWidget(QWidget): 

    def __init__(self): 
     # here goes the rest of your initialization code 
     # like the construction of your listview 

     # connect the valueChanged signal: 
     self.listview.verticalScrollBar().valueChanged.connect(self.scrolled) 

     # your parameter "f" 
     self.f = 'somevalue' # whatever 

    def scrolled(self, value): 

     if value == self.listview.verticalScrollBar().maximum(): 
      self.loadNextChunkOfData() 

    def loadNextChunkOfData(self): 
     # load the next piece of data and append to the listview 

您應該趕上lambda的文檔和信號槽框架。

+0

如何使用這個lambda表達式爲了給滾動的函數另外3個參數? – Gooman

+0

您可以簡單地編寫以下代碼:'lambda value:scrolled(scrollBar,someParameter,value)'。然而'lambda'更多是爲了這個例子的目的。理想情況下,你可以將上面的代碼放到一個類中,在這裏你可以將'valueChanged'信號連接到這個類的方法,而不是使用「獨立」函數。 – sebastian

+0

這是一個問題,編寫'lambda值:滾動(scrollBar,someParameter,value)'因爲我需要給'self'作爲第一個參數。 – Gooman