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 :

Passage de variables


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 30
    Par défaut Passage de variables
    Bonjour, je prog avec Tkinter et j'aimerais savoir comment passer des variables d'une classe à une autre.

    En fait, mes 2 classes sont dans 2 fichiers distincts, et une fois que je quitte le fichier principal, le "self" fait référence à l'instance de ma 2ème classe.

    Donc comment faire pour que je puisse accéder aux variables d'une classe alors que je suis dans une autre?

  2. #2
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Ta question est un peu vague dans le sens ou on ne sait pas ce que tu veux faire exactement...

    Pour passer des variables d'une classe à une autre on peut les passer en paramètres à la fonction __init__() de la classe. Mais encore une fois, tout dépend de ce que tu veux faire, et comment tes classes sont appelées...

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 30
    Par défaut
    Et bien j'ai donc 2 classes.

    Une principale définit comme ceci :
    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
     
    from Tkinter import *
    import tkFileDialog
    import tkMessageBox
     
    class Application:
       def __init__(self, boss):
          ...
       def run(self):
          ...
       def import_log(self):
          import log
     
    root = Tk()
    main_frame = Application(root)
    main_frame.run()
    et ma 2eme classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from Tkinter import *
     
    class Log:
       def __init__(self, boss):
          ...
       def run(self):
          ...
       def write(self):
          #dans cette fonction je voudrais faire des test sur des widgets de ma classe principale
     
    rooted = Tk()
    my_frame = Log(rooted)
    my_frame.run()

  4. #4
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Désolé, mais j'ai eu beau chercher je n'ai pas trouvé...

    Avec wxPython, pas de problème... Avec Tkinter je ne vois pas comment faire.

  5. #5
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 30
    Par défaut
    ok merci quand meme
    je vais tout regrouper dans une seule classe meme si ca fait un peu fourre-tout ^^

  6. #6
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Pourquoi ne pas te mettre à wxPython ?

    Je t'assure que c'est un vrai bonheur...

  7. #7
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 30
    Par défaut
    pas le temps de m'y mettre, j'ai un projet à rendre lundi :)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 57
    Par défaut
    classe 1==>classe2

    pour recuper la variables, utuliser
    du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return self var1, self var2
    dans la 1er classe

    pour les recuper dans la 2emme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a=nom_de_la_bil.nom_de_la_class(var1,var2)

  9. #9
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 30
    Par défaut
    hmmm ou faut-il placer les return dans la premiere classe?
    et c'est quoi "nom_de_la_bil" ?

    et j'ai une toute autre question au passage ^^
    c'est quoi la méthode ou l'option pour placer une root Tk ou un Toplevel au milieu de l'écran?

    ah vi aussi comment on fait pour qu'une root Tk ou un Toplevel toujours ne soit pas redimensionnable? (je sais que c'est tout con, avec la méthode resizable je crois, mais je n'ai pas réussi T_T)

    merci d'avance ^^

  10. #10
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Ci-dessous je t'ai fait un exemple en utilisant wxPython au lieu de Tkinter.

    1- Fichier test.py qui comprend la classe principale, une fenêtre avec juste un bouton. Quand on presse le bouton un compteur s'incrémente et un message est envoyé à une fenêtre espion construite à partir d'une classe située dans un autre fichier.

    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
    # -*- coding: iso-8859-1 -*-
     
    import wx
    import Log
     
     
    class Principale(wx.Frame):
      def __init__(self):
        wx.Frame.__init__(self, id=-1, parent = None, title = "fenêtre principale")
        self.compteur = 0
        self.bouton = wx.Button(self, -1, label = "Pressez-moi")
        self.Bind(wx.EVT_BUTTON, self.BoutonPresse, self.bouton)
        self.espion = Log.log()
        self.espion.Show(True)
     
      def BoutonPresse(self, evt):
        self.compteur += 1
        self.espion.SetValeur("Le bouton a été pressé " + str(self.compteur) + " fois" )
     
    class MonApp(wx.App):
      def OnInit(self):
        fen =Principale()
        fen.Show(True)
        self.SetTopWindow(fen)
        return True
     
    app = MonApp()
    app.MainLoop()
    2- le fichier Log.py qui contient la classe log (fenêtre espion sur laquelle s'affiche le message envoyé par la fenêtre principale)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # -*- coding: iso-8859-1 -*-
     
    import wx
     
    class log(wx.Frame):
      def __init__(self):
        wx.Frame.__init__(self, id=-1, parent = None, title = "fenêtre espion")
        self.mess = wx.StaticText(self, -1, label = "", size = (50, -1))
     
      def SetValeur(self, message):
        self.mess.SetLabel(message)
    Si tu étudies le code, tu t'apercevras que wxPython est d'une simplicité enfantine...

  11. #11
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 30
    Par défaut
    merci alain mais je n'ai vraiment pas le temps de me mettre au wxPython :/

    je réitère donc mes questions :

    hmmm ou faut-il placer les return dans la premiere classe?
    et c'est quoi "nom_de_la_bil" ?

    quelles sont les méthodes (ou options) pour qu'une root Tk ou un Toplevel ne soit pas redimensionnable et soit placer au milieu de l'écran?

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 4
    Par défaut
    Pour qu'un Tk ne soit pas redimensionnable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    class Application(Tk):
    	def __init__(root):
    		Tk.__init__(root)
    		root.title('Titre')
    		root.resizable(width=NO,height=NO)
    ...

Discussions similaires

  1. [langage] Probleme passage de variables entre modules
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2004, 12h25
  2. Passage de variable dans un lien asp
    Par VirginieGE dans le forum ASP
    Réponses: 4
    Dernier message: 27/07/2004, 10h06
  3. [Kylix] passage de variable en Libc
    Par zheng dans le forum EDI
    Réponses: 11
    Dernier message: 06/05/2004, 14h14
  4. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03
  5. [langage] Passage de variables...
    Par martijan dans le forum Langage
    Réponses: 8
    Dernier message: 30/07/2003, 09h48

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