来自孩子的父母的PyQT4 WheelEvent

时间:2015-02-07 23:36:20

标签: python event-handling pyqt parent-child

您好我的问题与此相关:PyQT4 WheelEvent

from PyQt4.QtGui import *
from PyQt4.QtCore import *

import sys


class Main(QWidget):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)

        layout = QHBoxLayout(self)
        layout.addWidget(Scroll(self))


class Scroll(QScrollArea):

    def __init__(self, parent=None):
        super(Scroll, self).__init__(parent)
        self.parent = parent

    def wheelEvent(self, event):
        super(Scroll, self).wheelEvent(event)
        print "wheelEvent", event.delta()

        newHeight = self.parent.geometry().height() - event.delta()
        width     = self.parent.geometry().width()
        self.parent.resize(width, newHeight)

app = QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())

我的Scroll类是在Qt Designer中创建的,我无法访问它

是否有机会访问Scroll类的PyQT WheelEvent,但是在Main类中?

1 个答案:

答案 0 :(得分:0)

使用event-filter

class Main(QWidget):
    def __init__(self, parent=None):
        ...            
        self.scroll.installEventFilter(self)

    def eventFilter(self, source, event):
        if event.type() == QEvent.Wheel and source is self.scroll:
            print "wheelEvent", event.delta()
            newHeight = self.geometry().height() - event.delta()
            width = self.geometry().width()
            self.resize(width, newHeight)
            # return True to consume the event
            return False
        return super(Main, self).eventFilter(source, event)
相关问题