[PySide] how to overwrite wheelEvent for QScrollBar?

Frank Rueter | OHUfx frank at ohufx.com
Thu Dec 24 00:14:26 CET 2015


Thanks Anna,

in the below example there is only one widget and all my tests have 
shown that it is the QScrollBar that sends the wheel event, yet it won't 
respond to the custom method.
I have worked around this now by overwriting event() instead like this:
     def event(self, event):
         if event.type() == QEvent.Wheel:
             do stuff
         else:
             super(PageScroller, self).event(event)
             return False


Seems brute force but it works.

Cheers,
frank

On 24/12/15 7:29 am, Anna Stenwick wrote:
> In the documentation for QWheelEvent it says:
> Wheel events are sent to the widget under the mouse cursor, but if 
> that widget does not handle the event they are sent to the focus widget.
>
> Perhaps the wrong widget is being sent the event, is your scroll bar 
> the focused widget?
>
> Also, be sure to set this in order to receive events for your scroll 
> bar widget:
>
> TheQWidget.setEnabled() 
> <http://srinikom.github.io/pyside-docs/PySide/QtGui/QWidget.html#PySide.QtGui.PySide.QtGui.QWidget.setEnabled>function 
> can be used to enable or disable mouse and keyboard events for a widget.
>
> I made a custom Dialog class awhile ago and handling the events was 
> the most frustrating part, sometimes it doesn't work the way you 
> expect it to. Try overriding QWidget.showEvent and see if your event 
> shows up there.
>
> On 12/22/2015 08:25 PM, Frank Rueter | OHUfx wrote:
>> Hi everybody,
>> quick Christmas question:
>>
>> I am trying to re-implement a QScrollBar's wheelEvent to change it's
>> delta but I just can't get it right for some reason. It kinda feels like
>> a bug to me but am not sure (using PySide 1.0.9).
>>
>> Below is a stripped down version of what I'm trying to do.
>> PageScroller().wheelEvent() never seems to be fired (though the wheel
>> does scroll the bar).
>> Does anybody have an idea what I'm doing wrong?
>>
>> Cheers,
>> frank
>>
>> class PageScroller(QScrollBar):
>>      '''Scroll widget for tool page'''
>>
>>      def __init__(self, parent=None):
>>          super(PageScroller, self).__init__(parent)
>>
>>      def wheelEvent(self, event):
>>          print 'received wheel event'
>>
>>
>> if __name__ == '__main__':
>>      def testSlot(i):
>>          print 'Current index changed:', i
>>
>>      app = QApplication(sys.argv)
>>      mainWindow = QWidget()
>>      layout = QVBoxLayout(mainWindow)
>>      s = PageScroller(mainWindow)
>>      layout.addWidget(s)
>>      mainWindow.show()
>>
>>      sys.exit(app.exec_())
>>
>>
>>
>> -- 
>> ohufxLogo 50x50 <http://www.ohufx.com>     *vfx compositing
>> <http://ohufx.com/index.php/vfx-compositing> | *workflow customisation
>> and consulting <http://ohufx.com/index.php/vfx-customising>* *
>>
>>
>>
>> _______________________________________________
>> PySide mailing list
>> PySide at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/pyside
>>
>
>

-- 
ohufxLogo 50x50 <http://www.ohufx.com> 	*vfx compositing 
<http://ohufx.com/index.php/vfx-compositing> | *workflow customisation 
and consulting <http://ohufx.com/index.php/vfx-customising>* *

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20151224/ea33dabb/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ohufxLogo_50x50.png
Type: image/png
Size: 2666 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20151224/ea33dabb/attachment.png>


More information about the PySide mailing list