Python affichage heure dynamique en continu

Résolu
Bonjour.

J'utilise le code suivant pour afficher l'heure courante dans une zone
Label
nommée
t1
avec le module
PyQt5
de python.
Ma question comment faire pour afficher la date toutes les secondes. c.a.d faire une horloge dynamique ?

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

4 réponses

  1. Modérateur
    Bonjour,

    Une petite recherche google t'amène par exemple à cette page, qui répond exactement à ton problème.

    # importing required librarie
    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__()
      
            # setting geometry of main window
            self.setGeometry(100, 100, 800, 400)
      
            # creating a vertical layout
            layout = QVBoxLayout()
      
            # creating font object
            font = QFont('Arial', 120, QFont.Bold)
      
            # creating a label object
            self.label = QLabel()
      
            # setting centre alignment to the label
            self.label.setAlignment(Qt.AlignCenter)
      
            # setting font to the label
            self.label.setFont(font)
      
            # adding label to the layout
            layout.addWidget(self.label)
      
            # setting the layout to main window
            self.setLayout(layout)
      
            # creating a timer object
            timer = QTimer(self)
      
            # adding action to timer
            timer.timeout.connect(self.showTime)
      
            # update the timer every second
            timer.start(1000)
      
        # method called by timer
        def showTime(self):
      
            # getting current time
            current_time = QTime.currentTime()
      
            # converting QTime object to string
            label_time = current_time.toString('hh:mm:ss')
      
            # showing it to the label
            self.label.setText(label_time)
      
      
    # create pyqt5 app
    App = QApplication(sys.argv)
      
    # create the instance of our Window
    window = Window()
      
    # showing all the widgets
    window.show()
      
    # start the app
    App.exit(App.exec_())


    Contrairement à ce qui a été dit plus haut, faire une boucle n'est pas la bonne manière de procéder, car tous les modules permettant d'afficher une interface graphique (que ce soit PyQt, GTK, ou Tk) utilisent une boucle principale pour exécuter le programme. En terme d'implémentation, cela veut dire que tout ton programme réagit à des événements (par exemple, un clic de souris, une saisie clavier, ou en l'occurrence, un pas de temps), et que le programme principale ne fait que lancer la fenêtre.

    Si l'on détaille maintenant le programme ci-dessus :
    • timer
      permet de lever un événement toutes les secondes ; celui-ci déclenche grâce à
      connect
      la méthode
      showTime
      ;
    • la méthode
      showTime
      corrige l'affichage ;
    • le programme principale ne faut que créer et lance l'application.


    Bonne chance
    1
    1. Contributeur
      bonjour,

      tu ne montres qu'une partie de ton code.

      Merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

      je suggère de faire une boucle, dans laquelle tu mets également un pause de une seconde (ou moins, suivant la précision requise).
      0
      1. Merci pour la réponse. voila mon code:
        from datetime import datetime
        from PyQt5.uic import loadUi
        from PyQt5.QtWidgets import QApplication
        app=QApplication([])
        win=loadUi('arith.ui')
        win.show()
        
        now = datetime.now()
        t2 = now.strftime("%H:%M:%S")
        win.t1.setText(t2)
        app.exec_()


        je veux savoir comment faire une boucle avec pause.
        0
      2. Contributeur
        @HAJRI64un exemple de boucle avec pause:
        import time
        while True:
            time.sleep(1)
            print("bonjour")
        0
    2. j'ai essayé ça, mais ça na pas marché avec l'interface graphique PyQt5
      0
      1. Contributeur
        comment as-tu fait?
        0
      2. Contributeur
        peux-tu partager le fichier ui? cela me permettrait de tester.
        0
    3. 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)


      Remarque :
      t1
      est la zone d'affichage de l'heure. c'est une zone
      Label
      0
      1. Contributeur
        je ne vois pas de boucle dans le code partagé.

        peux-tu utiliser les balises de code, comme expliqué en #1?

        peux-tu partager le fichier time.ui? cela me permettrait de tester.
        0