PyQt5: mueva la posición de la etiqueta dentro de la ventana con las teclas de flecha

En este artículo veremos cómo podemos mover la etiqueta dentro de la ventana usando las teclas de flecha, es decir, cada vez que se presiona la tecla de flecha (tecla de dirección), se mueve hacia esa dirección. Por ejemplo, cuando el usuario presiona la tecla de flecha hacia arriba, la etiqueta se moverá hacia arriba de manera similar, ya que la etiqueta de otras teclas de flecha también cambiará su posición.

Concepto: podemos cambiar la posición de la etiqueta incrementando/disminuyendo los valores de coordenadas de la etiqueta, pero no aumente ni disminuya si llega a cualquier extremo del lado a continuación, son los datos dados para hacer cuando se presiona cada tecla de flecha .

When Up arrow key is pressed : X Co-ordinate remain same, decrement the Y Co-ordinate 
When Down arrow key is pressed : X Co-ordinate remain same, increment the Y Co-ordinate 
When Left arrow key is pressed : Decrement X Co-ordinate, Y Co-ordinate remain same
When Right arrow key is pressed : Increment X Co-ordinate, Y Co-ordinate remain same

A continuación se muestran los datos de restricción de bordes para que la etiqueta permanezca en la ventana

Para el borde superior, la coordenada y debe ser siempre mayor que 0
Para el borde inferior, la coordenada y debe ser siempre menor que la altura de la ventana – altura de la etiqueta
Para el borde izquierdo, la coordenada x debe ser siempre mayor que 0
Para el borde derecho, la coordenada x debe ser siempre menor que el ancho de la ventana – ancho de la etiqueta

Pasos de implementación:
1. Cree una ventana principal
2. Cree una etiqueta dentro de la ventana principal
3. Agregue geometría de hoja de estilo a la etiqueta
4. Cree una variable de velocidad
5. Anule el evento de pulsación de tecla
6. Dentro del evento de pulsación de tecla obtenga el actual Coordenadas x e y de la etiqueta
7. Y verifique qué tecla se presiona y verifique si no se alcanza el extremo lateral, luego actualice las coordenadas x e y con la ayuda del movemétodo aumentando / disminuyendo el valor de velocidad de ellos

A continuación se muestra la implementación.

# importing libraries
from PyQt5.QtWidgets import * 
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import * 
from PyQt5.QtCore import * 
import sys
  
  
class Window(QMainWindow):
  
    def __init__(self):
        super().__init__()
  
        # setting title
        self.setWindowTitle("Python ")
  
        # width of window
        self.w_width = 500
  
        # height of window
        self.w_height = 500
  
        # setting geometry
        self.setGeometry(100, 100, self.w_width, self.w_height)
  
        # calling method
        self.UiComponents()
  
        # showing all the widgets
        self.show()
  
        # speed variable
        self.speed = 15
  
    # method for components
    def UiComponents(self):
  
        # creating a label
        self.label = QLabel(self)
  
        # label width
        self.l_width = 40
  
        # label height
        self.l_height = 40
  
        # setting geometry to the label
        self.label.setGeometry(200, 200, self.l_width, self.l_height)
  
        # setting stylesheet to the label
        self.label.setStyleSheet("QLabel"
                                 "{"
                                 "border : 4px solid darkgreen;"
                                 "background : lightgreen;"
                                 "}")
  
  
  
    # override the key press event
    def keyPressEvent(self, event):
  
        # get the current co-ordinates of the label
        # X Co-ordinate
        x = self.label.x()
  
        # Y Co-ordinate
        y = self.label.y()
  
        # if up arrow key is pressed
        if event.key() == Qt.Key_Up:
  
            # if top position is attained
            if y > 0:
                self.label.move(x, y - self.speed)
  
        # if down arrow key is pressed
        elif event.key() == Qt.Key_Down:
  
            # if bottom position is attained
            # for bottom point, bottom co-ordinate will be
            # height of window - height of label
            if y < self.w_height - self.l_height:
                self.label.move(x, y + self.speed)
  
        # if left arrow key is pressed
        elif event.key() == Qt.Key_Left:
  
            # if left end position is attained
            if x > 0:
                self.label.move(x - self.speed, y)
  
        # if down arrow key is pressed
        elif event.key() == Qt.Key_Right:
  
            # if right end position is attained
            # for right end point, right co-ordinate will be
            # width of window - width of label
            if x < self.w_width - self.l_width:
                self.label.move(x + self.speed, y)
  
  
  
  
  
# create pyqt5 app
App = QApplication(sys.argv)
  
# create the instance of our Window
window = Window()
  
# start the app
sys.exit(App.exec())

Producción :

Publicación traducida automáticamente

Artículo escrito por rakshitarora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *