2012-08-28 17 views
7

Mam problem ze zrozumieniem, jak działa metoda keyPressEvent w tym programie. W szczególności, co to jest "e"? Czy keyPressEvent jest przedefiniowaną metodą, używając wcześniej istniejącej instancji "e"?Jak działa metoda keyPressEvent w tym programie?

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() 

Odpowiedz

9

e jest "zdarzeniem", które jest generowane, gdy użytkownik naciśnie klawisz. Jest to dość powszechne w procedurach obsługi zdarzeń, jest to świetny sposób przekazywania informacji (takich jak który klawisz został naciśnięty - czyli co jest ciągnięte za pomocą e.key()) do obsługi zdarzeń, abyśmy mogli łączyć podobne zdarzenia i obsługiwać je za pomocą jedna funkcja.

# 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

Nie jestem zaznajomiony z obsługą zdarzeń, ale zgaduję, że klucz() jest zdefiniowany w Qt? Następnie, po naciśnięciu klawisza przechodzi do tej funkcji. Dzięki za pomoc! – Ci3

+0

.key() to metoda zdefiniowana w odpowiednim obiekcie Event (prawdopodobnie KeyPressEvent lub podobnym), która zwraca kod dla klucza, który został naciśnięty w celu wygenerowania zdarzenia. – FrankieTheKneeMan

Powiązane problemy