pyqt4:我可以覆盖没有子类的方法吗?

时间:2012-02-08 04:47:32

标签: override pyqt4 subclass

我希望改变QWidget的“keyPressEvent()”方法 毫无疑问,我创建了一个新类继承了“QWidget”,它可以做到这一点 但是,我从一个方法返回了一个QWidget。所以,我无法管理带子类的返回“QWidget” 如何制作自己的QWidget“keyPressEvent()”方法?

1 个答案:

答案 0 :(得分:3)

在窗口小部件上安装event filter,并捕获KeyPress事件:

from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.widget = QtGui.QWidget(self)
        self.widget.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.widget.installEventFilter(self)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.widget)

    def eventFilter(self, source, event):
        if (event.type() == QtCore.QEvent.KeyPress and
            source is self.widget):
            print('key pressed: %s' % event.text())
            return True
        return QtGui.QWidget.eventFilter(self, source, event)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    window.resize(320, 240)
    sys.exit(app.exec_())

请注意,该示例为所有按键返回True,这将停止对这些事件的任何进一步处理。如果您只是想“监听”事件而不处理它们,请确保eventFilter返回False