Diferència entre revisions de la pàgina «PyQt: Events de teclat»
Salta a la navegació
Salta a la cerca
Línia 2: | Línia 2: | ||
* '''keyPressEvent(self, e)''': tecla premuda | * '''keyPressEvent(self, e)''': tecla premuda | ||
* '''keyReleaseEvent(self,e)''': tecla alliberada | * '''keyReleaseEvent(self,e)''': tecla alliberada | ||
+ | |||
+ | ...i finalment donar el "focus" del teclat al widget (veure més avall). | ||
La referència de les tecles la teniu aquí: | La referència de les tecles la teniu aquí: |
Revisió del 19:28, 24 gen 2013
Per capturar els events de teclat cal reimplementar diversos mètodes dintre del nostre widget principal:
- keyPressEvent(self, e): tecla premuda
- keyReleaseEvent(self,e): tecla alliberada
...i finalment donar el "focus" del teclat al widget (veure més avall).
La referència de les tecles la teniu aquí:
http://doc.qt.digia.com/4.7/qt.html#Key-enum
Exemples
Un petit sample per incloure a la vostra classe (normalment a la main window).
def keyPressEvent(self, e):
if e.key() == QtCore.Qt.Key_Left:
val = self.xslider.value()
self.xslider.setValue( val - 2 )
elif e.key() == QtCore.Qt.Key_Right:
val = self.xslider.value()
self.xslider.setValue( val + 2 )
Oju amb l'autorepetició de tecles!!
Pel cas del keyReleaseEvent potser cal que comprovem si la tecla no ens ha saltat per "autorepeat" (quan mantenim premuda la tecla saltaran esdeveniments "a porrillo"). Per comprovar-ho farem:
def keyReleaseEvent(self, e):
if not e.isAutoRepeat():
if e.key() == QtCore.Qt.Key_Left:
self.barca.esq = False
elif e.key() == QtCore.Qt.Key_Right:
self.barca.dreta = False
Focus
Cal donar el "focus" del teclat al widget desitjat.
http://doc.qt.digia.com/qt/qwidget.html#setFocus
Simplement després del show() del widget principal:
self.show() self.setFocus()
Estratègies per moure una raqueta
...