2012-02-08 1 views
1

Я надеюсь изменить метод «keyPressEvent()» QWidget.
Несомненно, я создаю новый класс, наследующий «QWidget», он может это сделать.
Но у меня есть возвращаемый QWidget из метода. Таким образом, я не могу управлять возвращенным «QWidget» с подклассом.
Как я могу сделать свой собственный метод keyPressEvent() QWidget?pyqt4: Могу ли я переопределить метод без подкласса?

ответ

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.

+0

Я проверил! Ты всегда показываешь мне путь! Я ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО благодарит вас за вашу заботу –

 Смежные вопросы

  • Нет связанных вопросов^_^