Python affichage heure dynamique en continu

Résolu/Fermé
HAJRI64 Messages postés 6 Date d'inscription vendredi 22 janvier 2016 Statut Membre Dernière intervention 16 janvier 2022 - Modifié le 17 janv. 2022 à 14:36
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 17 janv. 2022 à 14:40
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

mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
Modifié le 17 janv. 2022 à 14:44
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 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
15 janv. 2022 à 14:29
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 vendredi 22 janvier 2016 Statut Membre Dernière intervention 16 janvier 2022
Modifié le 17 janv. 2022 à 14:36
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 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481 > HAJRI64 Messages postés 6 Date d'inscription vendredi 22 janvier 2016 Statut Membre Dernière intervention 16 janvier 2022
15 janv. 2022 à 16:41
un exemple de boucle avec pause:
import time
while True:
    time.sleep(1)
    print("bonjour")
0
HAJRI64 Messages postés 6 Date d'inscription vendredi 22 janvier 2016 Statut Membre Dernière intervention 16 janvier 2022
15 janv. 2022 à 18:02
j'ai essayé ça, mais ça na pas marché avec l'interface graphique PyQt5
0
yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
15 janv. 2022 à 18:33
comment as-tu fait?
0
yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
15 janv. 2022 à 18:36
peux-tu partager le fichier ui? cela me permettrait de tester.
0
HAJRI64 Messages postés 6 Date d'inscription vendredi 22 janvier 2016 Statut Membre Dernière intervention 16 janvier 2022
Modifié le 17 janv. 2022 à 14:37
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 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
16 janv. 2022 à 19:39
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