Python affichage heure dynamique en continu

Résolu
HAJRI64 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33758 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)
A voir également:

4 réponses

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