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

wxPython Discussion :

Récupérer un pointeur vers l'instance d'application


Sujet :

wxPython

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 45
    Par défaut Récupérer un pointeur vers l'instance d'application
    Bonjour à tous !

    Après plusieures heures de recherche sur le net ... Je ne trouve aucun résultat ... J'ai donc décidé de poser ma question ici.

    J'ai programmé une classe à part dans un fichier à part qui dérive de wx.Panel. Mais cette classe à besoin d'accéder à l'instance d'application pour pouvoir éxécuter une fonction qui s'y trouve.

    Ce que je veux principalement c'est transmettre des informations du module à l'application.

    Un exemple vaut mieux que de grands discours compliqués :

    Dans mon fichier principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import wx
    import fichier_module
     
    class Application(wx.App):
        def OnInit(self):
            self.pan = fichier_module.Panel([...])
            [...]
     
       def Fonction1(self, text=u""):
            print text
     
    app = Application()
    app.MainLoop()
    Dans mon second fichier, le fichier-module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import wx
     
    class Panel(wx.Panel):
        def __init__(self, ...):
            wx.Panel.__init__([...])
            [...]
            apli = self.GetAppInstance()
            apli.Fonction1(text=u"salut")
            [...]
    Ce qu'il me manque c'est le selg.GetAppInstance() qui n'existe pas bien sûr. La documentation m'apprend qu'il existeRAIT un pointeur global wx.TheApp, mais je ne trouve pas l'équivalent de ce pointeur en wxPython.

    En espérant que quelqu'un pourra m'aider ...
    Merci beaucoup !

    Lotendan

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    la solution est de passer le parent dans les fils (et d'ailleurs je ne vois pas comment on pourrait avoir le choix) de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import wx
     
    class Panel(wx.Panel):
        def __init__(self, parent=parent, ...):
            wx.Panel.__init__(self, parent=parent, [...])
            [...]
            parent.Fonction1(text=u"salut")
            [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import wx
    import fichier_module
     
    class Application(wx.App):
        def OnInit(self):
            self.pan = fichier_module.Panel(self, ...)
            [...]
     
       def Fonction1(self, text=u""):
            print text
     
    app = Application()
    app.MainLoop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 45
    Par défaut
    Salut ! Tout d'abord merci d'avoir répondu !

    Je viens d'essayer ta solution, et ... cela ne fonctionne pas
    Peut-être que je m'y prends mal, mais il me semble que l'on ne peut pas de toutes façons passer un objet de type wx.App en parent d'une fenêtre quelconque.
    J'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    in method 'new_Panel', expected argument 1 of type 'wxWindow'
    Comme je le dis, peut-être que je m'y prends mal :s

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    désolé, j'ai poussé le parent dans le wx.panel et il n'aime pas.
    cela devrait le faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import wx
     
    class Panel(wx.Panel):
        def __init__(self, parent=None, ...):
            wx.Panel.__init__(self, [...])
            [...]
            parent.Fonction1(text=u"salut")
            [...]
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 45
    Par défaut
    Non, toujours rien

    J'ai ceci d'un côté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class Panel(wx.Panel):
        def __init__(self, parent, id):
            wx.Panel.__init__(self, id, size=(358,300))
    et ceci de l'autre côté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Application(wx.App):
            def OnInit(self):
                self.pan = Panel(self, -1)
     
    app = Application()
    app.MainLoop()

    J'ai le même message d'erreur que précédemment, d'autant plus que le wx.Panel DOIT avoir un parent :s
    Si je met "parent=parent" dans le __init__, ça ne lui plaît pas car il me met un message d'erreur 'global name parent is not defined' ...

    Désolé, peut-être que je confonds quelque chose ou qu'on ne se comprend pas ^^

    EDIT : Ca y est je crois que je vois ce que tu veux dire !! C'est tout bête j'aurais dû y penser plus tôt ! J'essaierai ce soir car je dois y aller. Quoiqu'il en soit merci !!

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Par défaut
    Salut,

    En effet, il ne faut surtout pas mettre parent=parent car parent n'est pas un attribut de la classe Panel (ni d'aucune autre d'ailleurs - mais je dis peut-être une bêtise là...). Mets juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def __init__(self, parent, ...):
    D'autre part, un panel doit être enfant d'une frame (ou équivalent) avant de dépendre d'un wx.App.

    Du coup, dans ton panel, essaie par exemple d'accéder à ton wx.app par la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.GetGrandParent().Fonction1(...)
    (Bon à confimer hein...)

    Bonne chance

    A +

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    En effet, il ne faut surtout pas mettre parent=parent car parent n'est pas un attribut de la classe Panel (ni d'aucune autre d'ailleurs - mais je dis peut-être une bêtise là...).
    Dans le cas particulier, "def __init__(self, parent=parent,...)" plante parce que parent (le 2ème) n'est pas défini.
    Il faut écrire: parent=None ou parent tout court.
    Et vu la confusion, remplacer "parent" par wxapp pour dire "c'est l'adresse de..." devrait être encore mieux.
    - 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. Pointeurs vers documentation pour une créer une application web
    Par GeoffreyOnRails dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 08/06/2014, 21h16
  2. Récupérer le pointeur sur l'instance
    Par FrançoisLaterite dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/05/2014, 15h28
  3. récupérer le pointeur sur l'application
    Par JeanNoel53 dans le forum Visual C++
    Réponses: 4
    Dernier message: 03/04/2012, 15h32
  4. Utilité d'un pointeur vers une fonction ?
    Par Nasky dans le forum C
    Réponses: 10
    Dernier message: 20/03/2010, 19h54
  5. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43

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