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

Python Discussion :

Changer le texte d'un widget Label() [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Par défaut Changer le texte d'un widget Label()
    Bonjour à tous.tes,

    Je bloque depuis deux jours, sur le changement de texte d'un Label()

    Ce petit bout de code fonctionne très bien chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from tkinter import *
    fen = Tk() 
    def action():     
        labelBas.set("Je change le texte en cliquant") 
    labelBas = StringVar() 
    label2 = Label( fen, textvariable=labelBas) 
    labelBas.set("taratata") 
    b = Button(fen, text = "Test", command=action) 
    b.pack() 
    label2.pack() 
    fen.mainloop()

    Mais quand je veux l'utiliser dans mon exercice.

    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
    # Chargement des bibliothèques graphique et mathématique :
    from tkinter import *
    from math import *
     
    # événements souris :
    def pointeur(event):
        if choixAstre == 'deplTerre' :
            can.coords(terre, event.x-45,event.y-45, event.x+45,event.y+45)
        elif choixAstre == 'deplLune' :
            can.coords(lune, event.x-15,event.y-15, event.x+15,event.y+15)
        elif choixAstre == 'deplSatellite' :
            can.coords(satellite, event.x-7,event.y-7, event.x+7,event.y+7)
     
    # événements boutons du menu :
    def choixAstreT():
        global choixAstre
        choixAstre = 'deplTerre'
    def choixAstreL():
        global choixAstre 
        choixAstre = 'deplLune'
    def choixAstreS():
        global choixAstre 
        choixAstre = 'deplSatellite'
     
    ############################# Début du programme principal (main) ###############################
     
    xl1, yl1 = 280, 150 # coordonnées initiales de la lune (vatiables globales)
    xt1, yt1 = 100, 180 # coordonnées initiales de la terre (vatiables globales)
    xs1, ys1 = 200, 250 # coordonnées initiales du satellite (vatiables globales)
    choixAstre = ''
    labelHaut = 'Label vide pour le moment'
    labelBas = StringVar()
     
    # calcul distance terre lune :
    distTerreLune = sqrt(abs(xl1-yl1)**2 + abs(xt1-yt1)**2)
    labelBas.set('Distance Terre Lune = ' + str(distTerreLune) + ' pixels')
     
    # Création du widget principal ("maître") :
    fen = Tk()
    fen.title('Système solaire')                                            # texte haut de la fenètre
     
    # création des widgets "esclaves" et leurs positionements :
    label1 = Label(fen, text=labelHaut).grid(row =1, column =1, columnspan =2)
    label2 = Label(fen, textvariable=labelBas).grid(row =22,  column =1, columnspan =2)
    can = Canvas(fen,bg='black',height=400,width=600)
    can.bind('<Button-1>', pointeur)                                        # souris dans le canva
    terre = can.create_oval(xt1,yt1,xt1+90,yt1+90,width=2,fill='blue')      # widget terre
    lune = can.create_oval(xl1,yl1,xl1+30,yl1+30,width=2,fill='white')      # widget lune   
    satellite = can.create_oval(xs1,ys1,xs1+14,ys1+14,width=2,fill='red')   # widget satellite   
    can.grid(row =2, column =1, rowspan =20)
    # boutons du menu
    Button(fen,text='Depl. Terre',width=15,command=choixAstreT).grid(row =2, column =2)
    Button(fen,text='Depl. Lune',width=15,command=choixAstreL).grid(row =3, column =2)
    Button(fen,text='Depl. Satellite',width=15,command=choixAstreS).grid(row =4, column =2)
    Button(fen,text='Quitter',width=15,command=fen.quit).grid(row =21, column =2)
     
    # démarrage du réceptionnaire d'évènements (boucle principale) :
    fen.mainloop()
    Je ne parviens même pas à initialiser ma variable "labelBas" avec StringVar().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PS C:\Users\rmanf301\OneDrive - Cafdoc\Studio\python> & C:/Users/rmanf/AppData/Local/Microsoft/WindowsApps/python3.11.exe "c:/Users/rmanf/OneDrive - Cafdoc/Studio/python/10G-astres-v4 copy.py"
    Traceback (most recent call last):
      File "c:\Users\rmanf301\OneDrive - Cafdoc\Studio\python\10G-astres-v4 copy.py", line 32, in <module>
        labelBas = StringVar()
                   ^^^^^^^^^^^
      File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2032.0_x64__qbz5n2kfra8p0\Lib\tkinter\__init__.py", line 562, in __init__
        Variable.__init__(self, master, value, name)
      File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2032.0_x64__qbz5n2kfra8p0\Lib\tkinter\__init__.py", line 393, in __init__
        master = _get_default_root('create variable')
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2032.0_x64__qbz5n2kfra8p0\Lib\tkinter\__init__.py", line 319, in _get_default_root
        raise RuntimeError(f"Too early to {what}: no default root window")
    RuntimeError: Too early to create variable: no default root window
    PS C:\Users\rmanf3\OneDrive - Cafdoc\Studio\python>
    Merci par avance pour votre aide.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par scalpel Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2032.0_x64__qbz5n2kfra8p0\Lib\tkinter\__init__.py", line 319, in _get_default_root
        raise RuntimeError(f"Too early to {what}: no default root window")
    RuntimeError: Too early to create variable: no default root window
    PS C:\Users\rmanf3\OneDrive - Cafdoc\Studio\python>

    Merci par avance pour votre aide.
    Pourquoi de l'aide ? Tout est déjà écrit par Python. Tu n'as pas de fenêtre racine donc tu ne peux pas avoir d'objet Tk.
    Déplace ta ligne 39 fen = Tk() avant la ligne 32 labelBas = StringVar() et ça fonctionnera.

    Accessoirement pas besoin de prendre la valeur absolue d'un nombre que tu vas élever au carré (est-il besoin de te dire pourquoi ?). Et tu as math.hypot tout dédié aux calculs des hypothénuses.

    Citation Envoyé par scalpel Voir le message
    Je bloque depuis deux jours
    Deux jours pour lire un message d'erreur et en tirer les enseignements qui vont bien...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre confirmé Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Par défaut
    Bonjour Sve@r et merci beaucoup pour ton aide,

    Il va falloir que j'apprennes à bien interpréter les messages d'erreur, car c'est encore bien plus grave que ce que tu imagine.
    Je n'avais même pas fait le lien entre "window" et ma fenêtre "fen", je n'avais pas vu qu'il n'y avait pas de "s".

    Au beau milieux de toutes les lignes (chemin d'installation de tkinter), je pensais qu'il s'agissait d'un message d'erreur système (Windows).

    Merci également pour le calcul de l'hypoténuse.

    PS. Mieux vaut ne pas être susceptible pour poster sur ce forum.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par scalpel Voir le message
    Au beau milieux de toutes les lignes (chemin d'installation de tkinter), je pensait qu'il s'agissait d'un message d'erreur système (Windows).
    Effectivement le quiproquo est compréhensible. Moi j'avais l'avantage d'avoir déjà eu le cas (c'est la même chose avec Qt et probablement avec toutes les libs GUI). Mais dans Qt le message est plus explicite Must construct a QApplication before.

    Citation Envoyé par scalpel Voir le message
    PS. Mieux vaut ne pas être susceptible pour poster sur ce forum.
    En fait on a parfois l'impression d'être des cerveaux de remplacement et inconsciemment ça énerve car on ressent ça comme un abaissement général du niveau intellectuel français.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    ... En fait on a parfois l'impression d'être des cerveaux de remplacement et inconsciemment ça énerve car on ressent ça comme un abaissement général du niveau intellectuel français.
    J'ai 63 ans et je n'ai jamais programmé de ma vie, au bout d'un mois j'ai encore bien du mal avec toutes ces nouvelles notions.
    J'attends patiemment d'atteindre le nombre de points suffisant pour pouvoir ajouter une signature à mes messages.
    Je pourrait ainsi y indiquer qu'il ne faut pas compter sur mes questions pour élever le niveau intellectuel du forum.

    Trêve de plaisanterie : jusqu'à présent les réponses apportées à mes questions ont toutes été excellentes.
    Vous comprenez tous chaque fois quel est mon problème en y apportant une solution très souvent de façon pédagogique.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par scalpel Voir le message
    Il va falloir que j'apprennes à bien interpréter les messages d'erreur, car c'est encore bien plus grave que ce que tu imagine.
    Je n'avais même pas fait le lien entre "window" et ma fenêtre "fen", je n'avais pas vu qu'il n'y avait pas de "s".
    Les messages d'erreur Python sont "bruyants" mais dans un premier temps, on peut se concentrer sur la dernière ligne qui dit "RuntimeError: Too early to create variable: no default root window" et le début qui donne l'instruction qui l'a provoquée "labelBas = StringVar()".

    Citation Envoyé par scalpel Voir le message
    Au beau milieux de toutes les lignes (chemin d'installation de tkinter), je pensais qu'il s'agissait d'un message d'erreur système (Windows).
    Arrivé à programmer avec tkinter sans être à l'aise avec les messages d'erreur Python? Normalement si vous suivez le Swinnen, vous avez essayé de faire plein d'exercices avant d'arriver là et un des intérêts de ces exercices est de vous familiariser avec les messages d'erreur (et des tas d'autres choses).

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] changer le texte d'un label en c#
    Par theangel2011 dans le forum C#
    Réponses: 6
    Dernier message: 12/08/2011, 10h29
  2. Changer le texte d'un label dynamiquement
    Par avator dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 01/04/2009, 22h59
  3. Changer le texte d'un label à partir d'une autre classe
    Par joannak20 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 15/01/2009, 11h37
  4. Réponses: 2
    Dernier message: 05/12/2007, 22h54
  5. [MFC]Impossible de changer le texte d'un LABEL
    Par jlassira dans le forum MFC
    Réponses: 7
    Dernier message: 01/03/2006, 16h39

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