1
我希望改變QWidget的「keyPressEvent()」方法。
無疑,我創建一個新類繼承「QWidget」,它可以做到這一點。
但是,我有一個方法返回的QWidget。所以,我無法管理帶有子類的返回「QWidget」。
如何製作我自己的「keyPressEvent()」QWidget方法?pyqt4:我可以重寫一個沒有子類的方法嗎?
我希望改變QWidget的「keyPressEvent()」方法。
無疑,我創建一個新類繼承「QWidget」,它可以做到這一點。
但是,我有一個方法返回的QWidget。所以,我無法管理帶有子類的返回「QWidget」。
如何製作我自己的「keyPressEvent()」QWidget方法?pyqt4:我可以重寫一個沒有子類的方法嗎?
在widget安裝一個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
。
我查過了!你總是告訴我方式!我真的很感謝你的關心 – 2012-02-09 01:59:55