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 :

[wxPython] evènement bouton


Sujet :

wxPython

Vue hybride

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

    Informations forums :
    Inscription : Février 2005
    Messages : 11
    Par défaut [wxPython] evènement bouton
    Bonjour à tous!!! 8)
    me voilà confronté à un problème auquel je n'ai pas trouvé de solution,
    en effet:
    j'utilise wxpython, et j'aimerais gérer des évènements clique sur bouton, jusque là aucun soucis, mais mon problème, est que lorsque sur un évènement clique bouton, je redirige sur une méthode de ma classe, je n'arrive pas à passer d'arguments à cette méthode:
    exemple de code:$

    self.Bind(wx.EVT_BUTTON,self.caseonClickButton,IdDuBoutton)

    Comment faire pour passer des paramètres à la méthode "caseonClickButton"?
    Je vous remercie d'avance pour vos réponses!!
    Cordialement python_man!

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Par défaut
    Je vois pas l'utilité de passer des arguments autres que l'event du bouton vu que tout les autres variables de la classe sont accessible depuis ta fonction caseonClickButton :s

    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
    class MyFrame(wx.Frame):
        def __init__(
                self, parent, ID, title, pos=wx.DefaultPosition,
                size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE
                ):
     
            wx.Frame.__init__(self, parent, ID, title, pos, size, style)
            panel = wx.Panel(self, -1)
            [b]self.mavariable[/b]='toto'
            button = wx.Button(panel, 1003, "quelle est la variable")
            button.SetPosition((15, 15))
            self.Bind(wx.EVT_BUTTON, self.OnVar, button)
     
        def OnVar(self, event):
            print [b]self.mavariable[/b]

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 11
    Par défaut
    Je suis bien daccord avec toi!
    Mais lorsque l'interface graphique est conséquente, tu ne peux pas déclarer toutes tes variables de façon globale à toute ta classe, si celle-ci n'est utilisé que par une ou deux méthodes sur une vingtaine, autant la déclarer local à ta methode et la faire passer en argument, sinon ça devient vite le binz dans ton code.
    C'est pour celà que je voudrais passer des paramètres avec l'évènement onClick sur un bouton.
    Merci quand même pour ta réponse!!

  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
    Pour faire ça tu dois utiliser une expression lambda.

    Regardes les arguments que j'ai placé dans le Bind du bouton... Et essayes ce code...

    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
    import wx
     
    class MyFrame(wx.Frame):
        def __init__(
                self, parent = None, ID = -1, title = "Expressions lambda", pos=wx.DefaultPosition,
                size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE
                ):
     
            wx.Frame.__init__(self, parent, ID, title, pos, size, style)
            panel = wx.Panel(self, -1)
            variable = 'toto'
            button = wx.Button(panel, 1003, "quelle est la variable")
            button.SetPosition((15, 15))
            self.Bind(wx.EVT_BUTTON, lambda evt = wx.EVT_BUTTON, arg = variable : self.OnVar(evt, arg), button)
     
        def OnVar(self, event, argument):
            print argument
     
    class MonAppli(wx.App):
        def OnInit(self):
            frame = MyFrame()
            frame.Show(True)
            self.SetTopWindow(frame)
            return True
     
    app = MonAppli(True)
    app.MainLoop()

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 11
    Par défaut
    Ok, merci beaucoup, j'essai ça tout de suite!!

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 11
    Par défaut
    Et bien me revoilà pour une nouvelle question, suite à ta solution, je n'arrive pas à passer plusieurs arguments à une méthode!!
    suis-je obliger de passer par un argument de type liste??

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Par défaut
    Merci Alain

  8. #8
    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
    Citation Envoyé par python_man
    Et bien me revoilà pour une nouvelle question, suite à ta solution, je n'arrive pas à passer plusieurs arguments à une méthode!!
    suis-je obliger de passer par un argument de type liste??
    Pourtant tu peux passer autant d'arguments que tu le veux...

    Regardes ci-dessous le code modifié pour passer deux arguments :

    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
    import wx
     
    class MyFrame(wx.Frame):
        def __init__(
                self, parent = None, ID = -1, title = "Expressions lambda", pos=wx.DefaultPosition,
                size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE
                ):
     
            wx.Frame.__init__(self, parent, ID, title, pos, size, style)
            panel = wx.Panel(self, -1)
            var1 = 'toto'
            var2 = 'titi'
            button = wx.Button(panel, 1003, "quelles sont les variables")
            button.SetPosition((15, 15))
            self.Bind(wx.EVT_BUTTON, lambda evt = wx.EVT_BUTTON, arg1 = var1, arg2 = var2 : self.OnVar(evt, arg1, arg2), button)
     
        def OnVar(self, event, argum1, argum2):
            print argum1 + " " + argum2
     
    class MonAppli(wx.App):
        def OnInit(self):
            frame = MyFrame()
            frame.Show(True)
            self.SetTopWindow(frame)
            return True
     
    app = MonAppli(True)
    app.MainLoop()

  9. #9
    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
    Mais si tu préfères passer une liste, tu fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            self.Bind(wx.EVT_BUTTON, lambda evt = wx.EVT_BUTTON, arg = [var1,  var2] : self.OnVar(evt, arg), button)
     
        def OnVar(self, event, argument):
            print argument[0] + " " + argument[1]

  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
    Citation Envoyé par Alain_72
    Mais si tu préfères passer un tuple, tu fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            self.Bind(wx.EVT_BUTTON, lambda evt = wx.EVT_BUTTON, arg = (var1,  var2) : self.OnVar(evt, arg), button)
     
        def OnVar(self, event, argument):
            print argument[0] + " " + argument[1]

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

    Informations forums :
    Inscription : Février 2005
    Messages : 11
    Par défaut

    Super, merci bcoup pour la syntaxe, maintenant tout marche nickel!!
    thank you very much!!!

Discussions similaires

  1. Probleme Bouton en wxpython
    Par waldi084 dans le forum wxPython
    Réponses: 1
    Dernier message: 13/05/2013, 08h05
  2. [wxpython] selectionner un toggle bouton a la fois
    Par hysah dans le forum wxPython
    Réponses: 7
    Dernier message: 03/02/2006, 13h49
  3. [wxpython] bitmap bouton qui reste pressé
    Par hysah dans le forum wxPython
    Réponses: 3
    Dernier message: 20/01/2006, 20h41
  4. [wxpython][wx.frame] mettre une image sur un bouton
    Par Kyti dans le forum wxPython
    Réponses: 7
    Dernier message: 02/05/2005, 12h13
  5. [wxPython] bouton
    Par airod dans le forum wxPython
    Réponses: 5
    Dernier message: 26/03/2005, 17h42

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