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

GTK+ avec Python Discussion :

variable globale et pyGTK


Sujet :

GTK+ avec Python

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2003
    Messages : 48
    Par défaut variable globale et pyGTK
    Bonjour,

    J'ai un soucis de variable globale... J'expose le problème :
    J'ai 2 fichiers :
    - main.py (définit les variables et lance la fenêtre GUI)
    - Window1.py (gère la fenêtre elle même, affichage et callbacks)

    Mon fichier main.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    from Window1 import *
     
    if __name__ == "__main__":
        globals()["test"] = "ma variable globale"
        window = Window1("??")
     
        gtk.main()
    Mon fichier Window1.py
    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
     
    import gtk, sys, pygtk, chardet
    pygtk.require('2.0')
     
    class Window1:
        def __init__(self, arg1):
            self.arg1 = arg1
            self.gtk_window = gtk.Window(gtk.WINDOW_TOPLEVEL)
            self.gtk_window.connect("destroy", gtk.main_quit)
            button = gtk.Button("Custom Button")
            button.connect("clicked", self.button_clicked)
            self.gtk_window.add(button)
            self.gtk_window.show_all()
     
        def button_clicked(self, button):
            print("button")
            print globals()["test"]
    Quand je clique sur le bouton, la variable globale n'existe pas ...

    Si quelqu'un peut m'expliquer le pourquoi du comment.

    D'avance Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Par défaut
    Bonjour

    Je ne comprends pas bien quel objectif tu vises, mais ta façon de forcer une écriture dans le dictionnaire global des variables n'est pas très propre.

    Python sait creer des attributs à la volée dans une classe, ce qui permet déjà beaucoup de fantaisie bien agréable par rapport à d'autres langagues que je ne citerai pas

    Pour amorcer une réflexion et t'apprendre à pêcher plutôt que d'essayer de te donner un poisson qui pourrait ne pas te convenir en plus j'ai bricolé ton code pour qu'il te montre quelques elements.....

    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
    import gtk, sys, pygtk #chardet
    pygtk.require('2.0')
     
    class Window1:
        def __init__(self, arg1):
            self.arg1 = arg1
            self.gtk_window = gtk.Window(gtk.WINDOW_TOPLEVEL)
            self.gtk_window.connect("destroy", gtk.main_quit)
            button = gtk.Button("Custom Button")
            button.connect("clicked", self.button_clicked)
            self.gtk_window.add(button)
            self.gtk_window.show_all()
     
        def button_clicked(self, button):
            print("button")
            for element in globals():
                print element,'==>', globals()[element]
                print"+++++++++++++++++++++"
            #print globals()["test"]

    2eme partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from Window1 import *
     
    if __name__ == "__main__":
        globals()["test"] = "ma variable globale"
        window = Window1("??")
     
        for element in globals():
                print element,'==>', globals()[element]
                print"+++++++++++++++++++++"
        print globals()["test"]
     
        gtk.main()
    j'ai l'habitude de regarder les tripes à l'intérieur pour occulter la situation. Très souvent j'en déduis mon erreur.
    Je me permet un tout petit luxe de bien séparer les éléments par un trait ....histoire d'y voir plus clair..
    Voilà ci cela peut t'aider ......

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2003
    Messages : 48
    Par défaut
    En fait, je me demandais comment déclarer une variable globale dans ce contexte. En gros, je comprends pas pourquoi en ayant déclaré une variable globale au début du programme, je ne la retrouve plus après.

    Je sais que la boucle gtk.main() c'est un autre (thread ou processus) mais je pensais que la variable étant globale et déclarée avant l'appel à la fonction gtk.main(), je la retrouverai dans mes callbacks.

    Disons que je pourrais très bien passer cette variable dans le constructeur de Window1, ça c'est clair. Mais si j'avais envie qu'une variable soit accessible en lecture seule dans tout mon programme sans pour autant la passer en paramètre dans chaque constructeur ou appel à une fonction, ça me simplifierai la vie.

Discussions similaires

  1. Variable globale / Propriété des threads
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 03/10/2003, 10h49
  2. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20
  3. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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