2012-08-28 11 views
7

Tengo problemas para entender cómo funciona el método keyPressEvent en este programa. Específicamente, ¿qué es "e" aquí? ¿KeyPressEvent es un método redefinido que utiliza una instancia "e" preexistente?¿Cómo funciona el método keyPressEvent en este programa?

import sys 
from PyQt4 import QtGui, QtCore 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

    def initUI(self): 

     self.setGeometry(300,300,250,150) 
     self.setWindowTitle('Event handler') 
     self.show() 

    def keyPressEvent(self, e): 

     if e.key() == QtCore.Qt.Key_Escape: 
      self.close() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

Respuesta

9

e es el "evento" que se genera cuando un usuario presiona una tecla. Esto es bastante común en los manejadores de eventos, es una gran manera de pasar información (como qué tecla presionar, que es lo que se obtiene con e.key()) a los manejadores de eventos, de modo que podamos combinar eventos relacionados y manejarlos con una sola función.

# A key has been pressed! 
def keyPressEvent(self, event): 
    # Did the user press the Escape key? 
    if event.key() == QtCore.Qt.Key_Escape: # QtCore.Qt.Key_Escape is a value that equates to what the operating system passes to python from the keyboard when the escape key is pressed. 
     # Yes: Close the window 
     self.close() 
    # No: Do nothing. 
+0

No estoy muy familiarizado con los controladores de eventos, pero supongo que la clave() se define en Qt? Luego, cuando se presiona una tecla, pasa a esta función. ¡Gracias por la ayuda! – Ci3

+0

.key() es un método definido en el objeto de evento apropiado (probablemente KeyPressEvent, o algo similar) que devuelve un código para la clave que se presionó para generar el evento. – FrankieTheKneeMan

Cuestiones relacionadas