Я надеюсь изменить метод «keyPressEvent()» QWidget.
Несомненно, я создаю новый класс, наследующий «QWidget», он может это сделать.
Но у меня есть возвращаемый QWidget из метода. Таким образом, я не могу управлять возвращенным «QWidget» с подклассом.
Как я могу сделать свой собственный метод keyPressEvent() QWidget?pyqt4: Могу ли я переопределить метод без подкласса?
1
A
ответ
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
.
Я проверил! Ты всегда показываешь мне путь! Я ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО благодарит вас за вашу заботу –