Vicent Mas schrieb:
Hello,

I'm trying to make a QTableView with two 'connected' vertical scrollbars. By connected I mean that the second scrollbar should be able to act on the first one. As a simple case I want the first scrollbar to repeat the action triggered by the second one. For instance, if I press the down arrow of the second scrollbar I want the down arrow of the first scrollbar to be pressed too. The attached script tries to do it. However an unexpected (unexpected for me I mean :-) TypeError makes the script to fail. Could someone help me with this problem, please?

You didn't write were the error actually occurs. Anyway I had the same problem of linking multiple scollbars. My solution is below. Of course this only makes sense if the sliders have the same range. Otherwise the class could be modified to use relative values. Depends on what you want to accomplish.

Use the class like this:

mySliderLinker = SliderLinker([scrollbar1, scrollbar2])

Regards
Georg


from PyQt4 import QtCore,QtGui
from PyQt4.QtCore import SIGNAL,SLOT


class SliderLinker(QtCore.QObject):
    '''Links multiple QAbstractSlider s together.

If one slider's value changes, the other linked sliders will be set
    to this value.'''

    def __init__(self, sliders, parent = None):
        super(SliderLinker,self).__init__(parent)
        self._sliders = sliders
        self._linkerSlots = []
        self.initSliders()

    def initSliders(self):
        for s in self._sliders:
            ls = LinkerSlot(self,s)
            self._linkerSlots.append(ls)

    def updateFrom(self,slider):
        val = slider.value()
        for s in self._sliders:
            if(s is not slider):
                s.setValue(val)

class LinkerSlot(QtCore.QObject):
    def __init__(self,linker,slider, parent = None):
        super(LinkerSlot,self).__init__(parent)
        self._linker = linker
        self._slider = slider
        self.connect(slider, SIGNAL('valueChanged(int)'),
                self.updateSliders)

    def updateSliders(self, value):
        self._linker.updateFrom(self._slider)


_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to