2011-12-29 61 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是时隙(信号处理)。