IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Affichage de la date et de l'heure dans un Canvas Tkinter


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Animateur
    Inscrit en
    Novembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Animateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2016
    Messages : 22
    Points : 8
    Points
    8
    Par défaut Affichage de la date et de l'heure dans un Canvas Tkinter
    Bonjour à tous !

    Je suis en train de créer une sorte de station météo qui regroupe un certain nombre d'informations sur un même écran; séparés par des lignes

    Je suis actuellement en train d'essayer d'afficher l'heure dans un Canvas , jusqu'à cette étape pas de soucis ,
    Par contre je ne sait pas comment rafraîchir le Canvas car les chiffres ne s'effacent pas et se superposent (je n'ai pas ce souci dans un label par exemple mais peut on afficher le label dans un Canvas ?), si quelqu'un peut m'aider merci.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Alex73160 Voir le message
    Par contre je ne sait pas comment rafraîchir le Canvas car les chiffres ne s'effacent pas et se superposent (je n'ai pas ce souci dans un label par exemple mais peut on afficher le label dans un Canvas ?), si quelqu'un peut m'aider merci.
    Pour modifier le contenu d'un Label, c'est label.config(text='nouveau texte'). Pour modifier l'item d'un Canvas (crée avec .create_text) ce sera .itemconfig(item, text='....'). Et par ailleurs, on peut "placer" un Label dans un Canvas (avec .create_window).

    Après une différence entre Label et item text d'un Canvas, c'est la transparence du fond "par défaut": si au lieu de modifier, on en ajoute un autre par dessus, çà masquera (ou pas) le texte qui sera dessous.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Animateur
    Inscrit en
    Novembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Animateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2016
    Messages : 22
    Points : 8
    Points
    8
    Par défaut rafraichissement et plusieurs éléments "graphiques"
    merci pour ta réponse :-)

    J'ai une autre énigme :
    je souhaite afficher une image en arrière plan grâce à la fonction "imagefont" qui fonctionne seulement quand j'enlève mon canvas.delete(ALL) et c'est logique mais comment faire pour que mon heure se raffraichisse sans sucrer l'image ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    from Tkinter import *
     
    import time
    import threading
     
    import glob
    import os
     
    fenetre = Tk()
    fenetre.overrideredirect(1)
    fenetre.title("fun-Weather 2017 V1.0 By Alexandre Richard") 
    fenetre.resizable(width=False, height=False)
     
    # canvas
    canvas = Canvas(fenetre, width=1024, height=600, background='black')
     
     
    #def imagefont():
     
        #img = PhotoImage(file="/home/pi/Pictures/montagne.gif")
        #item = canvas.create_image(0,0, anchor=NW, image=img)
        #time.sleep(0.3)		
        #fenetre.after(100,imagefont)
     
    #fenetre.after(100, imagefont)
     
     
    def lignes():
     
        ligne1 = canvas.create_line(512, 0, 512, 600, fill="white")
        ligne2 = canvas.create_line(0, 150, 1024, 150,fill="white")
        fenetre.after(50, lignes)
     
     
     
    fenetre.after(50, lignes)
     
    #label = Label(fenetre, text="Affichage de l'heure", width=30, height=5)
     
    def majheure():
        canvas.delete(ALL)
        "affiche l'heure courante"
        #################################################################
        now = "12h 36min 5s " # COMPLETER AVEC L'HEURE ACTUELLE avec time
        #################################################################
        now = time.strftime(" %H:%M:%S           %d-%m-%Y",time.localtime())
     
        canvas.config()
        item = canvas.create_text(520, 75, text=now, font="FreeSans 55", fill="white")
     
        # Commande qui rappelle la fonction majheure après 300ms
        time.sleep(0.3)		
        fenetre.after(50,majheure)
     
     
     
    fenetre.after(50, majheure)
     
    # Création d'un bouton pour demarrer l'horloge
    ##demarre = Button(fenetre, text="demarrer", command=update)
    # Création d'un bouton pour quitter l'horloge
    quitte = Button(fenetre, text="quitter", command=fenetre.destroy)
     
    # Affichage du label et des boutons dans la fenêtre
    #label.pack()
    #demarre.pack()
    quitte.pack(side =BOTTOM, padx =2, pady =2)
     
     
     
     
    canvas.pack()
     
    fenetre.mainloop()

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Alex73160 Voir le message
    je souhaite afficher une image en arrière plan grâce à la fonction "imagefont" qui fonctionne seulement quand j'enlève mon canvas.delete(ALL) et c'est logique mais comment faire pour que mon heure se raffraichisse sans sucrer l'image ?
    C'est logique? Si vous ne postez pas un code qui reproduise un peu ce que vous essayez de raconter en français, çà n'aide pas.
    Lancez la console Python, créez un Canvas, affichez l'image, puis ajoutez-y du texte.
    Normalement, l'empilement (le z-order ou ce qui est dessus) respecte l'ordre de création, donc vous devriez voir le texte.... Et comme par défaut le fond du texte est transparent, l'image de fond restera visible (i.e. l'image n'est pas plus "sucrée" que nécessaire...).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Animateur
    Inscrit en
    Novembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Animateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2016
    Messages : 22
    Points : 8
    Points
    8
    Par défaut Suite
    C'est justement ce que j'ai fait affichage de l'image OK, lignes dessinées par dessus OK , heure et date OK sauf qu'à chaque fois qu'un nouveau chiffre s'affiche : l'ancien reste... Au final c'est illisible et je me retrouve avec quelque chose du genre 88:88:88

    Dans la fonction "majheure" avec canvas.delete(ALL) c'est ce qui se passe ,
    si je l'enlève : tout s'affiche sauf que les chiffres "s'empilent " il y a comme un problème d'actualisation.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Alex73160 Voir le message
    sauf qu'à chaque fois qu'un nouveau chiffre s'affiche : l'ancien reste... Au final c'est illisible et je me retrouve avec quelque chose du genre 88:88:88
    Nous revoilà avec la question initiale (à laquelle je vous ai déjà répondu).
    Et comme pas de trace d'itemconfig dans le dernier code que vous avez posté, vous n'avez toujours pas pris la peine de comprendre comment faire fonctionner çà et vous êtes toujours en train de bidouiller vos empilements de .create_text.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Animateur
    Inscrit en
    Novembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Animateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2016
    Messages : 22
    Points : 8
    Points
    8
    Par défaut Rappel d'une fonction dans tkinter , utilisation de PhotoImage
    Bonjour à tous,

    Je suis en train de créer une petite station météo avec une image de fond qui change à chaque saison grace à la fonction startphoto() (je précise avec mes petits moyens d'amateur)

    Ma première question c'est : vu que tkinter est en principe une boucle , est ce que je dois rappeler ma fonction et surtout comment si c'est le cas?

    Sinon est ce que si la variable Now change cela va changer l'image aussi sans relancer le script ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #définir les images de base avec photo image
    #hiver
    img1 = PhotoImage(file="/home/pi/Desktop/Funweather/datafunweather/hiver.gif")
    #printemps
    img2 = PhotoImage(file="/home/pi/Desktop/Funweather/datafunweather/printemps.gif")
    #été
    img3 = PhotoImage(file="/home/pi/Desktop/Funweather/datafunweather/ete.gif")
    #automne
    img4 = PhotoImage(file="/home/pi/Desktop/Funweather/datafunweather/automne.gif")
     
    #fonction qui recupere la date et affiche l'image en fonction de celle-ci
    def startphoto():
            #on recupere la date
            now = time.strftime("%m%d",time.localtime())
            print now
            #on affiche une des 4 immages en fonction de la date (saison)
                # on envoi l'image dans le canvas
            if now>="0101" and now <="0319": # hiver
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img1)
            if now>="0320" and now <="0620": # Printemps
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img2)
            if now>="0621" and now <="0921": # été
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img3)
            if now>="0922" and now <="1220": # automne
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img4)
            if now>="1221" and now <="1231": # Hiver
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img1)
     
    startphoto()
    Merci pour l'aide
    Alex

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Animateur
    Inscrit en
    Novembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Animateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2016
    Messages : 22
    Points : 8
    Points
    8
    Par défaut merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    ## Crée un item text. Il sera ID #1
    id_text1 = canvas.create_text(512, 75, text='heure', font="FreeSans 55", fill="white")
    print(id_text1)
     
    id_text2 = canvas.create_text(760, 125, text='day', font="FreeSans 25", fill="white")
    print(id_text2)
     
    # affiche l'heure courante
     
    def majheure():
     
        now = "12h 36min 5s " # COMPLETER AVEC L'HEURE ACTUELLE avec time
     
        now = time.strftime(" %H:%M:%S           %d-%m-%Y",time.localtime())
     
        #L'objet now est iséré dans le canvas
        canvas.itemconfig(id_text1, text=now)
     
        #Ajout de la date en toutes lettres
        #on initialise la locale du système (pour avoir la date dans la langue système) 
        locale.setlocale(locale.LC_ALL,'' )
        #On cree la date en toutes lettres
        nameday = time.strftime(" %A-%d-%B")
        #puis on insère l'objet dans le canvas
        canvas.itemconfig(id_text2, text=nameday)
     
     
        # Commande qui rappelle la fonction majheure après 300ms
     
        #time.sleep(0.2)		
        fenetre.after(1000,majheure)
     
     
     
    fenetre.after(1000, majheure)

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Alex73160 Voir le message
    Ma première question c'est : vu que tkinter est en principe une boucle , est ce que je dois rappeler ma fonction et surtout comment si c'est le cas?
    Si vous n'avez pas demandé à Tkinter d'appeler votre fonction à certaines conditions, il n'a aucune raison de le faire. Dans ce cas particulier, vous pourriez utiliser les méthodes .afterXXXX

    Citation Envoyé par Alex73160 Voir le message
    Sinon est ce que si la variable Now change cela va changer l'image aussi sans relancer le script ?
    Sûr que s'il faut attendre la prochaine saison pour pouvoir vérifier que le script fonctionne, on n'est pas arrivé. Mais rien ne vous empêche de tester la logique avec une période de quelques secondes.... ou avec des dates de tests bidon (autre que l'heure et la date actuelles).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Animateur
    Inscrit en
    Novembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Animateur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2016
    Messages : 22
    Points : 8
    Points
    8
    Par défaut essai after
    J'ai essayer fenetre.after(5000, startphoto)

    j'ai un "conflit" avec ma fonction majheure

    un coup j'ai l'affichage du canvas avec l'heure et la date, et apres 5 secondes c'est l'image.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    import bme280
    from Tkinter import *
    import Tkinter as tk
    import time
    import locale
    import glob
     
     
    import os
     
    fenetre = tk.Tk()
    fenetre.attributes("-fullscreen",1)
    fenetre.overrideredirect(1)
    fenetre.title("fun-Weather 2017 V1.0 By Alexandre Richard") 
    fenetre.resizable(width=False, height=False)
     
    # canvas
    canvas = tk.Canvas(fenetre, width=1022, height=598, background='black')
    canvas.pack()
     
     
    #définir les images de base avec photo image
    #hiver
    img1 = PhotoImage(file="/home/pi/Desktop/Funweather/datafunweather/hiver.gif")
    #printemps
    img2 = PhotoImage(file="/home/pi/Desktop/Funweather/datafunweather/printemps.gif")
    #été
    img3 = PhotoImage(file="/home/pi/Desktop/Funweather/datafunweather/ete.gif")
    #automne
    img4 = PhotoImage(file="/home/pi/Desktop/Funweather/datafunweather/automne.gif")
     
    #fonction qui recupere la date et affiche l'image en fonction de celle-ci
    def startphoto():
     
            #on recupere la date
            now = time.strftime("%m%d",time.localtime())
            print now
     
            #on affiche une des 4 immages en fonction de la date (saison)
                # on envoi l'image dans le canvas
            if now>="0101" and now <="0319": # hiver
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img1)
            if now>="0320" and now <="0620": # Printemps
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img2)
            if now>="0621" and now <="0921": # été
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img3)
            if now>="0922" and now <="1220": # automne
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img4)
            if now>="1221" and now <="1231": # Hiver
                #canvas.delete(ALL)
                item = canvas.create_image(0,0, anchor=NW, image=img1)
            #Lignes dans le canvas
            ligne1 = canvas.create_line(512, 0, 512, 600, fill="white")
            ligne2 = canvas.create_line(0, 150, 1024, 150,fill="white")
            ligne3 = canvas.create_line(0, 300, 1024, 300,fill="white")
            ligne4 = canvas.create_line(512, 450, 1024, 450,fill="white")
     
     
     
    startphoto()
     
     
     
     
     
     
     
    ## Crée un item text. Il sera ID #1
    id_text1 = canvas.create_text(512, 75, text='heure', font="FreeSans 55", fill="white")
    print(id_text1)
     
    id_text2 = canvas.create_text(760, 125, text='day', font="FreeSans 25", fill="white")
    print(id_text2)
     
    # affiche l'heure courante
     
    def majheure():
     
        now = "12h 36min 5s " # COMPLETER AVEC L'HEURE ACTUELLE avec time
     
        now = time.strftime(" %H:%M:%S           %d-%m-%Y",time.localtime())
     
        #L'objet now est iséré dans le canvas
        canvas.itemconfig(id_text1, text=now)
     
        #Ajout de la date en toutes lettres
        #on initialise la locale du système (pour avoir la date dans la langue système) 
        locale.setlocale(locale.LC_ALL,'' )
        #On cree la date en toutes lettres
        nameday = time.strftime(" %A-%d-%B")
        #puis on insère l'objet dans le canvas
        canvas.itemconfig(id_text2, text=nameday)
     
     
        # Commande qui rappelle la fonction majheure après 300ms
     
        #time.sleep(0.2)		
        fenetre.after(1000,majheure)
     
     
     
    fenetre.after(1000, majheure)
     
     
    # Création d'un bouton pour demarrer l'horloge
    ##demarre = Button(fenetre, text="demarrer", command=update)
    # Création d'un bouton pour quitter la station meteo, dans le cannvas
    #quitte = Button(fenetre, text="quitter", command=fenetre.destroy)
     
    bt_quit = Button(fenetre, text="Quitter", command=fenetre.destroy)
    bt_quit_fenetre = canvas.create_window(987, 585, window=bt_quit)
     
     
    # Affichage du label et des boutons dans la fenêtre
    #label.pack()
    #demarre.pack()
    #bt_quit_fenetre.pack(side =TOP, padx =2, pady =2)
     
     
     
    fenetre.mainloop()

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Si vous ne comprenez plus le code que vous avez écrit, simplifiez, décomposez le en petits morceaux que vous aller faire fonctionner indépendamment les uns des autres. Puis lorsque vous saurez "confiant", vous pourrez assembler/combiner...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [AC-2002] Gestion de la date et de l'heure dans un formulaire.
    Par vortexlechien dans le forum IHM
    Réponses: 1
    Dernier message: 04/04/2009, 20h34
  2. affichage des dates avec heure dans liste déroulante
    Par schwarzy2 dans le forum VB.NET
    Réponses: 1
    Dernier message: 15/07/2008, 10h59
  3. Affichage de la date et de l'heure
    Par supersoft5 dans le forum C++Builder
    Réponses: 4
    Dernier message: 28/06/2007, 18h17
  4. Réponses: 4
    Dernier message: 15/01/2007, 11h53
  5. Inserer juste la date courrant sans l'heure dans un varchar
    Par bleuerouge dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/06/2006, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo