Partage
  • Partager sur Facebook
  • Partager sur Twitter

tkinter - fonction qui agit sur un Label

    10 août 2018 à 15:03:19

    Bonjour à tous,

    Tout d'abord désolé pour le titre peu clair du sujet, je ne savais pas comment expliquer ce que je veux faire de façon suffisamment courte pour un titre.

    Voilà donc : j'ai créé une fenêtre tkinter, avec un "Label" pour afficher différentes choses. Ces choses-là dépendent de fonctions. Cependant, pour la clarté du code, pour éviter d'avoir tout sur le même fichier .py, je veux mettre les fonctions sur un autre fichier. C'est là que je coince :

    Ce code-là fonctionne :

    import tkinter as tk
    import random as rd
    
    
    #definition de la fenetre 
    COMPTEUR_MAX = 10
    compteur = 0
    
    #fenetre graphique
    ma_fenetre = tk.Tk()
    ma_fenetre.title("Fenetre")
    
    #labels
    affichage = tk.Label(ma_fenetre, text="", font = ("Helvetica", 12))
    affichage.grid(row=1, column=1)
    
    #Boutons
    bouton_lancer = tk.Button(ma_fenetre, text = "Commencer", command = lambda: lancer(ma_fenetre))
    bouton_lancer.grid(row=3, column=1)
    
    
    
    def lancer(ma_fenetre):
        if rd.randint(1,5) == 1:
            fonction_A(ma_fenetre)
        else:
            fonction_B(ma_fenetre)
    
    def fonction_A(fenetre):
        affichage.configure(text="affichage A")
        fenetre.update_idletasks()
    
    def fonction_B(fenetre):
        affichage.configure(text="affichage B")
        fenetre.update_idletasks()
    
    
    
    ma_fenetre.mainloop()

    Cependant, si, comme je l'ai dit, je crée un autre fichier, appelé par exemple "mes_fonctions.py", contenant les définitions de fonction_A et fonction_B, et que mon code principal est :

    import tkinter as tk
    import random as rd
    from mes_fonctions import *
    
    
    #definition de la fenetre 
    COMPTEUR_MAX = 10
    compteur = 0
    
    #fenetre graphique
    ma_fenetre = tk.Tk()
    ma_fenetre.title("Fenetre")
    
    #labels
    affichage = tk.Label(ma_fenetre, text="", font = ("Helvetica", 12))
    affichage.grid(row=1, column=1)
    
    #Boutons
    bouton_lancer = tk.Button(ma_fenetre, text = "Commencer", command = lambda: lancer(ma_fenetre))
    bouton_lancer.grid(row=3, column=1)
    
    
    
    def lancer(ma_fenetre):
        if rd.randint(1,5) == 1:
            fonction_A(ma_fenetre)
        else:
            fonction_B(ma_fenetre)
    
    
    
    
    
    ma_fenetre.mainloop()

     j'obtiens l'erreur suivante : " NameError : name 'affichage' is not defined ".

    Comment puis-je résoudre ce problème ? Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      10 août 2018 à 15:07:19

      Passer "affichage" en argument.

      Dans le code initial, "affichage" a valeur de variable globale, donc forcément ça marche. Dans le premier code c'était superflu d'ailleurs de passer "fenetre" en argument, car globale elle aussi.

      • Partager sur Facebook
      • Partager sur Twitter

      tkinter - fonction qui agit sur un Label

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown