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