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 :

Probleme variables global


Sujet :

Python

  1. #1
    Membre du Club Avatar de stuffy
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Points : 49
    Points
    49
    Par défaut Probleme variables global
    Bonjour je suis encore un débutant et je bute sur le variable globale / local dans le code ci dessou j'essai de créer des bouton suivant et précédent qui vont augmenter ou diminuer la valeur d'une variable pour la variable qu'il faudra choisir dans une liste je vous met le code source.

    S'il vous plait aidez moi


    code :

    # -*- coding: Latin-1 -*-


    # **** PROGRAMMED BY HUGUES (STUFFY-92) [ FRENCH ] **** #


    # ##################################
    # #
    # Version : Alpha 1.0 #
    # Auteur : H.Pascault 2008 #
    # Licence : GPL #
    # #
    # ##################################





    # IMPORTATION DES BIBLIOTEQUES #

    from Tkinter import*
    import tkFont
    import tkMessageBox



    # DEBUT DU SCRIPT PRINCIPAL #

    a = 0

    def suivant():
    global a
    a=a+1


    def precedent():
    global a
    a=a-1



    page_1 = "Test page 1"
    page_2 = "Test page 2"
    page_3 = "Test page 3"

    page = [page_1, page_2, page_3]


    def About():
    tkMessageBox.showinfo("A propos", " Version : Alpha 1.0 \n Programmeur : Hugues (stuffy-92) \n Contact : stuffy-92@live.fr")



    # DEBUT DU SCRIPT VISUEL #


    # ----- Création de la fenêtre ----- #

    fenetre=Tk()
    fenetre.configure(width=500,height=500)
    fenetre.title('TUTO')
    fenetre.resizable(width=False, height=False)
    fenetre.iconbitmap("Icon.ico")


    # ----- Création d'une variable contenant une police d'écriture ----- #

    format_texte=tkFont.Font(fenetre)
    format_texte.configure(size=10,family="calibri")

    # ----- Création d'une variable contenant une image ----- #

    img1 = PhotoImage(file = "Précédent.gif")
    img2 = PhotoImage(file = "Suivant.gif")

    # ----- Creation du menu ----- #

    mainmenu = Menu(fenetre)

    menu_aide = Menu(mainmenu)
    menu_fichier = Menu(mainmenu)

    menu_fichier.add_command(label="Quitter", command=fenetre.destroy,font=format_texte)
    menu_aide.add_command(label="A propos", command=About,font=format_texte)

    mainmenu.add_cascade(label = "fichier", menu=menu_fichier)
    mainmenu.add_cascade(label = "Aide", menu=menu_aide)

    fenetre.config(menu = mainmenu)


    # ----- Mise en place du texte ----- #

    etiquette_1=Label(fenetre)
    etiquette_1.configure(text = page[a], pady = 10, font = format_texte)
    etiquette_1.grid(row = 1, column = 2)


    # ----- Mise en place du bouton ( Précédent ) ----- #




    bouton1=Button(fenetre)
    bouton1.configure(command=precedent(), relief=FLAT,bd=0, font=format_texte, image=img1)
    bouton1.grid(row=2, column=1, pady=10, padx=10)



    bouton2=Button(fenetre)
    bouton2.configure(command=suivant(), relief=FLAT,bd=0, font=format_texte, image=img2)
    bouton2.grid(row=2, column=3, pady=10, padx=10)


    # ----- Permet le maintient de la fenêtre ----- #

    fenetre.mainloop()

    #----------------------------
    ===========================
    #
    # Windows xp pour développer
    # Linux Ubuntu pour développer
    # Osx Mobile pour se relaxer
    #
    ===========================

  2. #2
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    L'erreur se situe ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # ----- Mise en place du bouton ( Précédent ) ----- #
    
    
    
    
    bouton1=Button(fenetre)
    bouton1.configure(command=precedent(), relief=FLAT,bd=0, font=format_texte, image=img1)
    bouton1.grid(row=2, column=1, pady=10, padx=10)
    
    
    
    bouton2=Button(fenetre)
    bouton2.configure(command=suivant(), relief=FLAT,bd=0, font=format_texte, image=img2)
    bouton2.grid(row=2, column=3, pady=10, padx=10)
    Dans les declaration de commandes dans les widgets (Button, bindings, add_command et autres), on ne met pas de parenthèses aux fonctions... enfin si y'a moyen d'en mettre, c'est grâce à lambda, mais comme tu débutes, ne te préocupe pas de ça pour l'instant et retiens que DANS les widgets Tkinter on ne met pas de parenthèses aux fonctions

    PS : Retiens aussi qu'il vaut mieux éviter d'une manière générale les variables globales

  3. #3
    Membre du Club Avatar de stuffy
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Points : 49
    Points
    49
    Par défaut Comprend pas


    je suis désespéré mon programme doit être terminer avant le 25 juin et je ne trouve pas ce qui cloche alors je compte sur vous

    Quelqu'un du forum ma dit de rajouter a mes fonctions un print qui affiche la valeur de la variable a, et il n'y a pa de problème la console m'indique que a augment et diminuer grace au bouton suivant et précédent.

    donc je me demande pourquoi cela naffiche pas mes different page c'est comme s'il ny avait pas de lien en le label et ma variable a

    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
     
    # -*- coding: Latin-1 -*-
     
     
    # **** PROGRAMMED BY HUGUES (STUFFY-92)  [  FRENCH ]  **** #
     
     
    # ###################################
    #									          #
    # Version : Alpha 1.0                                                                      #
    # Auteur : H.Pascault 2008                                                           #
    # Licence : GPL                                                                               #
    #									          #
    # ###################################
     
     
     
    #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------#
     
    # IMPORTATION DES BIBLIOTEQUES #
     
    from Tkinter import*
    import tkFont
    import tkMessageBox
     
    #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------#
     
    # DEBUT DU SCRIPT PRINCIPAL #
     
    a = 0
     
    def suivant():
    	global a
    	a=a+1
    	print 'La variable (a) vaux :', a
     
    def precedent():
    	global a
    	a=a-1
    	print 'La variable (a) vaux :', a
     
     
    page_1 = "Test page 1"
    page_2 = "Test page 2"
    page_3 = "Test page 3"
    page_4 = "Test page 4"
    page_5 = "Test page 5"
     
    texte = [page_1, page_2, page_3, page_4, page_5]
     
     
    def About(): 
    	tkMessageBox.showinfo("A propos", " Version : Alpha 1.0 \n Programmeur : Hugues (stuffy-92) \n Contact : stuffy-92@live.fr")
     
    #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------#
     
    # DEBUT DU SCRIPT VISUEL #
     
     
    # ----- Création de la fenêtre ----- # 
     
    fenetre=Tk()
    fenetre.configure(width=500,height=500)
    fenetre.title('TUTO')
    fenetre.resizable(width=False, height=False)
    fenetre.iconbitmap("Icon.ico")
     
     
    # ----- Création d'une variable contenant une police d'écriture ----- # 
     
    format_texte=tkFont.Font(fenetre)
    format_texte.configure(size=10,family="calibri")
     
    # ----- Création d'une variable contenant une image ----- # 
     
    img1 = PhotoImage(file = "Précédent.gif")
    img2 = PhotoImage(file = "Suivant.gif")
     
    # ----- Creation du menu ----- # 
     
    mainmenu = Menu(fenetre)
     
    menu_aide = Menu(mainmenu)
    menu_fichier = Menu(mainmenu) 
     
    menu_fichier.add_command(label="Quitter", command=fenetre.destroy,font=format_texte) 
    menu_aide.add_command(label="A propos", command=About,font=format_texte)
     
    mainmenu.add_cascade(label = "fichier", menu=menu_fichier)
    mainmenu.add_cascade(label = "Aide", menu=menu_aide)
     
    fenetre.config(menu = mainmenu)
     
     
    # ----- Mise en place du texte ----- #
     
    etiquette_1=Label(fenetre)
    etiquette_1.configure(text = texte[a], pady = 10, font = format_texte)
    etiquette_1.grid(row = 1, column = 2)
     
     
    # ----- Mise en place du bouton ( Précédent )  ----- #
     
     
     
     
    bouton1=Button(fenetre)
    bouton1.configure(command=precedent, relief=FLAT,bd=0, font=format_texte, image=img1)
    bouton1.grid(row=2, column=1, pady=10, padx=10)
     
     
     
    bouton2=Button(fenetre)
    bouton2.configure(command=suivant, relief=FLAT,bd=0, font=format_texte, image=img2)
    bouton2.grid(row=2, column=3, pady=10, padx=10)
     
     
    # ----- Permet le maintient de la fenêtre ----- # 
     
    fenetre.mainloop()
     
    #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------#
    ===========================
    #
    # Windows xp pour développer
    # Linux Ubuntu pour développer
    # Osx Mobile pour se relaxer
    #
    ===========================

  4. #4
    Membre averti Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Points : 344
    Points
    344
    Par défaut
    Ton problème c'est que tu ne modifies pas le texte de ton label etiquette_1 dans tes fonctions suivant() et precedent(), tu modifie seulement la valeur de a.
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    def suivant():
    	global a
    	a=a+1
    	print 'La variable (a) vaux :', a
     
            # Modifier le texte de etiquette_1 ici
     
    def precedent():
    	global a
    	a=a-1
    	print 'La variable (a) vaux :', a
     
            # Modifier le texte de etiquette_1 ici

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'ai essayé de faire tourner ton programme, et j'ai provoqué les modifs suivantes:

    - pour les boutons, il faut ajouter un texte pour qu'ils s'affichent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bouton1.configure(text="précédent", ......)
    bouton2.configure(text="suivant", ......)

    - il faut ajouter la modif d'affichage du label à la fin des 2 fonctions precedent et suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etiquette_1.configure(text = texte[a])
    Avec ça, ça fonctionne.

    Tyrtamos

    (grillé par zabibof mais on dit la même chose)
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Membre du Club Avatar de stuffy
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Points : 49
    Points
    49
    Par défaut Je sais
    JE REPOND ZABIBOF :

    Je le sais bien mais j'ai créé une liste avec plusieur texte et ma fonction va me permettre de choisir quelle page je veut voir affiché grace a la variable a et donc mont label a pour configuration text = texte[a] la variable a définis quelle phrase de la liste je veut avoir.
    ===========================
    #
    # Windows xp pour développer
    # Linux Ubuntu pour développer
    # Osx Mobile pour se relaxer
    #
    ===========================

  7. #7
    Membre du Club Avatar de stuffy
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Points : 49
    Points
    49
    Par défaut
    Je vous remercie tous mon programme tourne parfaitement bien et pour l'info si je n'ai pas mis de texte suivant et précédent a mes boutons c'est parce que j'ai mis des flèches à la place.

    c'est la faite our moi car je devez terminez ce petit programe pour un amis

    ===========================
    #
    # Windows xp pour développer
    # Linux Ubuntu pour développer
    # Osx Mobile pour se relaxer
    #
    ===========================

  8. #8
    Membre averti Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Points : 344
    Points
    344
    Par défaut
    Bon puisque ça marche déjà, ceci n'est qu'une petite remarque.

    Tu peux associer à ton label une variable de type StringVar, comme ça, lorsque cette variable est modifié, le texte de ton label change automatiquement.

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    etiquette_1_text = StringVar()
     
    etiquette_1 = Label(fenetre, textvariable = etiquette_1_text)
    #...

    Dans tes fonctions, tu n'as plus qu'à changer la valeur de etiquette_1_text et le texte de ton label change avec.
    Par exemple pour la fonction suivant()

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def suivant():
            global a
    	a += 1
            etiquette_1_text.set(texte[a])

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

Discussions similaires

  1. probleme variable global
    Par bubu92 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/01/2010, 08h49
  2. probleme, variable globale
    Par manam dans le forum Forms
    Réponses: 3
    Dernier message: 28/07/2009, 18h20
  3. Probleme : Variables globales pas accessible
    Par ickylevel dans le forum Général Python
    Réponses: 7
    Dernier message: 09/08/2007, 21h26
  4. probleme variable global
    Par acik59 dans le forum C
    Réponses: 9
    Dernier message: 14/05/2007, 16h34
  5. Probleme de variable globale?
    Par issam16 dans le forum Access
    Réponses: 7
    Dernier message: 01/07/2006, 17h32

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