Crear reloj analógico usando PyQt5 en Python

Requisito previo: Introducción a pyqt-5

Un reloj o reloj se llama «analógico» cuando tiene manecillas móviles y (generalmente) horas marcadas del número 1 al 12 para mostrarle la hora. ¡Algunos tienen números romanos (I, II, III, etc.) en su lugar, o no tienen ningún número! En otras palabras: no un reloj digital.

PyQt5 es un conjunto de herramientas GUI multiplataforma, un conjunto de enlaces de Python para Qt v5. Uno puede desarrollar una aplicación de escritorio interactiva con tanta facilidad debido a las herramientas y la simplicidad que ofrece esta biblioteca. Una aplicación GUI consta de Front-end y Back-end.
 

Acercarse : 

  • Cree una clase Clock que herede la clase QMainWindow.
  • Dentro de la clase Clock se crea un objeto temporizador que actualiza todo el código después de cada segundo. 
  • Cree tres objetos poligonales para cada manecilla del reloj.
  • Cree un método de evento de pintura.
  • Dentro del método de evento de pintura, obtenga la hora actual y el mínimo de ancho o alto de las ventanas.
  • Cree un objeto de pintor y un método para dibujar las manos. 
  • Dentro del método para dibujar manos (puntero), tome argumentos como color, rotación y objeto poligonal.
  • Gire el objeto pintor y dibuje el puntero.
  • Dentro del método de evento de pintura, de acuerdo con la hora actual, establezca el valor de rotación y llame al método de puntero de dibujo. 
  • Dibuja la imagen de fondo del reloj, es decir, líneas para cada hora. 

A continuación se muestra la implementación:
 

Python3

# importing libraries
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
  
# creating a clock class
class Clock(QMainWindow):
  
    # constructor
    def __init__(self):
        super().__init__()
  
        # creating a timer object
        timer = QTimer(self)
  
        # adding action to the timer
        # update the whole code
        timer.timeout.connect(self.update)
  
        # setting start time of timer i.e 1 second
        timer.start(1000)
  
        # setting window title
        self.setWindowTitle('Clock')
  
        # setting window geometry
        self.setGeometry(200, 200, 300, 300)
  
        # setting background color to the window
        self.setStyleSheet("background : black;")
  
        # creating hour hand
        self.hPointer = QtGui.QPolygon([QPoint(6, 7),
                                        QPoint(-6, 7),
                                        QPoint(0, -50)])
  
        # creating minute hand
        self.mPointer = QPolygon([QPoint(6, 7),
                                  QPoint(-6, 7),
                                  QPoint(0, -70)])
  
        # creating second hand
        self.sPointer = QPolygon([QPoint(1, 1),
                                  QPoint(-1, 1),
                                  QPoint(0, -90)])
        # colors
        # color for minute and hour hand
        self.bColor = Qt.green
  
        # color for second hand
        self.sColor = Qt.red
  
    # method for paint event
    def paintEvent(self, event):
  
        # getting minimum of width and height
        # so that clock remain square
        rec = min(self.width(), self.height())
  
        # getting current time
        tik = QTime.currentTime()
  
        # creating a painter object
        painter = QPainter(self)
  
  
        # method to draw the hands
        # argument : color rotation and which hand should be pointed
        def drawPointer(color, rotation, pointer):
  
            # setting brush
            painter.setBrush(QBrush(color))
  
            # saving painter
            painter.save()
  
            # rotating painter
            painter.rotate(rotation)
  
            # draw the polygon i.e hand
            painter.drawConvexPolygon(pointer)
  
            # restore the painter
            painter.restore()
  
  
        # tune up painter
        painter.setRenderHint(QPainter.Antialiasing)
  
        # translating the painter
        painter.translate(self.width() / 2, self.height() / 2)
  
        # scale the painter
        painter.scale(rec / 200, rec / 200)
  
        # set current pen as no pen
        painter.setPen(QtCore.Qt.NoPen)
  
  
        # draw each hand
        drawPointer(self.bColor, (30 * (tik.hour() + tik.minute() / 60)), self.hPointer)
        drawPointer(self.bColor, (6 * (tik.minute() + tik.second() / 60)), self.mPointer)
        drawPointer(self.sColor, (6 * tik.second()), self.sPointer)
  
  
        # drawing background
        painter.setPen(QPen(self.bColor))
  
        # for loop
        for i in range(0, 60):
  
            # drawing background lines
            if (i % 5) == 0:
                painter.drawLine(87, 0, 97, 0)
  
            # rotating the painter
            painter.rotate(6)
  
        # ending the painter
        painter.end()
  
# Driver code
if __name__ == '__main__':
    
  app = QApplication(sys.argv)
    
  # creating a clock object
  win = Clock()
    
  # show
  win.show()
    
  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 *