2011-12-29 29 views

回答

5

您需要將一個滾動條的valueChanged信號連接到另一個滾動條的setValue插槽(反之亦然)。

乍一看,這似乎危險的遞歸,但Qt的似乎來處理它,沒有任何問題,如下例所示:

from PyQt4 import QtGui, QtCore 

class Window(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.listA = QtGui.QListWidget(self) 
     self.listB = QtGui.QListWidget(self) 
     layout = QtGui.QHBoxLayout(self) 
     layout.addWidget(self.listA) 
     layout.addWidget(self.listB) 
     for index in range(100): 
      self.listA.addItem('Sample text for Item %d' % index) 
      self.listB.addItem('Sample text for Item %d' % index) 
     self.listA.horizontalScrollBar().valueChanged.connect(
      self.listB.horizontalScrollBar().setValue) 
     self.listB.horizontalScrollBar().valueChanged.connect(
      self.listA.horizontalScrollBar().setValue) 
     self.listA.verticalScrollBar().valueChanged.connect(
      self.listB.verticalScrollBar().setValue) 
     self.listB.verticalScrollBar().valueChanged.connect(
      self.listA.verticalScrollBar().setValue) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.show() 
    sys.exit(app.exec_()) 
+0

謝謝你的忠告。我可以很好地管理listWidget :) – 2012-01-02 01:31:28

+0

我的聲望點顯示「11」,所以我不能投票答覆。我對這個系統很熟悉。所以,我不知道如何提高我的聲譽。我怎樣才能做到這一點? – 2012-01-02 09:03:01

0

要跟蹤滾動條的移動,您必須重新實現scrollContentsBy()虛擬功能。看看也給QAbstractSlider::actionTriggered()信號,並給sliderPosition財產

1

QListWidget繼承QListView,它繼承QAbstractItemView,這...

反正你可以看到所有QListWidget成員點擊List of all members, including inherited members,你找到verticalScrollBar() const : QScrollBar *方法,它是從QAbstractScrollArea繼承的。

您可以連接到listWidget的垂直滾動條valueChanged信號:

listWidget.verticalScrollBar().valueChanged.connect(onScrollBarValueChanged) 

哪裏onScrollBarValueChanged是時隙(信號處理)。