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 delmove
mé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