Mostrar hora dinámica en tiempo real en Python

Resuelto
Bonjour.

Estoy utilizando el siguiente código para mostrar la hora actual en una zona
Label
llamada
t1
con el módulo
PyQt5
de python.
Mi pregunta es cómo hacer para mostrar la fecha cada segundo, es decir, hacer un reloj dinámico.

now = datetime.now() t2 = now.strftime("%H:%M:%S") win.t1.setText(t2)

4 respuestas

  1. Moderador
    Hola,

    Una pequeña búsqueda en Google te lleva, por ejemplo, a esta página, que responde exactamente a tu problema.

    # importando la biblioteca requerida import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtWidgets import QVBoxLayout, QLabel from PyQt5.QtGui import QFont from PyQt5.QtCore import QTimer, QTime, Qt class Window(QWidget): def __init__(self): super().__init__() # estableciendo la geometría de la ventana principal self.setGeometry(100, 100, 800, 400) # creando un diseño vertical layout = QVBoxLayout() # creando objeto de fuente font = QFont('Arial', 120, QFont.Bold) # creando un objeto de etiqueta self.label = QLabel() # alineando al centro la etiqueta self.label.setAlignment(Qt.AlignCenter) # estableciendo la fuente a la etiqueta self.label.setFont(font) # añadiendo la etiqueta al diseño layout.addWidget(self.label) # estableciendo el diseño en la ventana principal self.setLayout(layout) # creando un objeto temporizador timer = QTimer(self) # añadiendo acción al temporizador timer.timeout.connect(self.showTime) # actualiza el temporizador cada segundo timer.start(1000) # método llamado por el temporizador def showTime(self): # obteniendo la hora actual current_time = QTime.currentTime() # convirtiendo el objeto QTime a cadena label_time = current_time.toString('hh:mm:ss') # mostrándolo en la etiqueta self.label.setText(label_time) # crear app de pyqt5 App = QApplication(sys.argv) # crear la instancia de nuestra ventana window = Window() # mostrando todos los widgets window.show() # iniciar la app App.exit(App.exec_())


    Contrariamente a lo que se dijo anteriormente, hacer un bucle no es la forma correcta de proceder, ya que todos los módulos que permiten mostrar una interfaz gráfica (ya sea PyQt, GTK o Tk) utilizan un bucle principal para ejecutar el programa. En términos de implementación, eso significa que todo tu programa reacciona a eventos (por ejemplo, un clic del mouse, una entrada de teclado o, en este caso, un paso de tiempo) y que el programa principal solo lanza la ventana.

    Ahora, si detallamos el programa anterior:
    • timer
      permite que se dispare un evento cada segundo; este se activa mediante
      connect
      al método
      showTime
      ;
    • el método
      showTime
      corrige la visualización;
    • el programa principal solo crea y lanza la aplicación.


    Buena suerte.
    1
    1. from datetime import datetime import time from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication app=QApplication([]) win=loadUi('time.ui') win.show() now = datetime.now() t2 = now.strftime("%H:%M:%S") win.t1.setText(t2)


      Nota :
      t1
      es la zona de visualización de la hora. es una zona
      Label
      0
      1. Colaborador
        No veo ningún bucle en el código compartido.

        ¿Puedes usar las etiquetas de código, como se explicó en el #1?

        ¿Puedes compartir el archivo time.ui? Eso me permitiría probar.
        0
    2. He intentado esto, pero no funcionó con la interfaz gráfica de PyQt5.
      0
      1. Colaborador
        Je suis un modèle de traitement de texte.
        0
      2. Colaborador
        ¿Puedes compartir el archivo de interfaz? Me permitiría probar.
        0
    3. Colaborador
      Hola,

      solo muestras una parte de tu código.

      Gracias por usar las etiquetas de código cuando compartes código: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

      sugiero hacer un bucle, en el que también incluyas una pausa de un segundo (o menos, dependiendo de la precisión requerida).
      0
      1. Merci pour la réponse. Voici votre code traduit : ```html
        from datetime import datetime 
        from PyQt5.uic import loadUi 
        from PyQt5.QtWidgets import QApplication 
        
        app=QApplication([]) 
        win=loadUi('arith.ui') 
        win.show() 
        
        while True: 
            now = datetime.now() 
            t2 = now.strftime("%H:%M:%S") 
            win.t1.setText(t2) 
            app.processEvents() 
            time.sleep(1)  # Pause de 1 seconde avant la prochaine mise à jour
        
        app.exec_()


        ```
        0
      2. Colaborador
        @HAJRI64un ejemplo de bucle con pausa:
        import time while True: time.sleep(1) print("hola")
        0