Diferència entre revisions de la pàgina «PyQt: Events de teclat»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
(Es crea la pàgina amb «un petit sample per incloure a la vostra classe (normalment a la main window): <syntaxhighlight lang="python"> def keyPressEvent(self, e): if e.key() == QtCo…».)
 
Línia 1: Línia 1:
un petit sample per incloure a la vostra classe (normalment a la main window):
+
Per capturar els events de teclat cal <u>reimplementar diversos mètodes dintre del nostre widget principal</u>:
 +
* '''keyPressEvent(self, e)''': tecla premuda
 +
* '''keyReleaseEvent(self,e)''': tecla alliberada
  
 +
La referència de les tecles la teniu aquí:
 +
http://doc.qt.digia.com/4.7/qt.html#Key-enum
 +
<br>
 +
 +
== Exemples ==
 +
 +
Un petit sample per incloure a la vostra classe (normalment a la main window).
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
 
     def keyPressEvent(self, e):
 
     def keyPressEvent(self, e):
Línia 9: Línia 18:
 
             val = self.yslider.tickPosition()
 
             val = self.yslider.tickPosition()
 
             self.yslider.setTickPosition( val + 2 )
 
             self.yslider.setTickPosition( val + 2 )
 +
</syntaxhighlight>
 +
<br>
 +
<big class="exercici">Oju amb l'autorepetició de tecles!!</big>
 +
<br>
 +
 +
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:
 +
 +
<syntaxhighlight lang="python">
 +
    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
 
</syntaxhighlight>
 
</syntaxhighlight>

Revisió del 19:15, 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

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.yslider.tickPosition()
            self.yslider.setTickPosition( val - 2 )
        elif e.key() == QtCore.Qt.Key_Right:
            val = self.yslider.tickPosition()
            self.yslider.setTickPosition( 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