Python affichage heure dynamique en continu

Résolu
HAJRI64 Messages postés 9 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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. HAJRI64 Messages postés 9 Statut Membre
       
      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
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > HAJRI64 Messages postés 9 Statut Membre
         
        un exemple de boucle avec pause:
        import time
        while True:
            time.sleep(1)
            print("bonjour")
        0
  3. HAJRI64 Messages postés 9 Statut Membre
     
    j'ai essayé ça, mais ça na pas marché avec l'interface graphique PyQt5
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      comment as-tu fait?
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peux-tu partager le fichier ui? cela me permettrait de tester.
      0
  4. HAJRI64 Messages postés 9 Statut Membre
     
    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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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