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