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] selectionner un toggle bouton a la fois


Sujet :

wxPython

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Par défaut [wxpython] selectionner un toggle bouton a la fois
    bonjour,
    j'ai 3 boutons toggle
    comment puis-je faire pour qu'on ne puisse activer un seul bouton a la fois. c'est a dire qu'un seul bouton sur les puisse rester enfoncé. Quand on clique sur un second celui ci s'enfonce et les autres se desactive

    merci

  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
    Comme un exemple vaut mieux qu'un discours :

    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
    # -*- coding: iso-8859-15 -*-
     
    import wx
     
    class Fenetre(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, title = "test")
            sizer = wx.BoxSizer(wx.HORIZONTAL)
            self.bt1 = wx.ToggleButton(self, -1, label = "Bt1")
            self.bt2 = wx.ToggleButton(self, -1, label = "Bt2")
            self.bt3 = wx.ToggleButton(self, -1, label = "Bt3")
            sizer.Add(self.bt1, 1, 10, wx.ALL)
            sizer.Add(self.bt2, 1, 10, wx.ALL)
            sizer.Add(self.bt3, 1, 10, wx.ALL)
            self.SetSizer(sizer)
            self.Fit()
            self.SetAutoLayout(True)
     
            wx.EVT_TOGGLEBUTTON(self, self.bt1.GetId(), self.OnPress)
            wx.EVT_TOGGLEBUTTON(self, self.bt2.GetId(), self.OnPress)
            wx.EVT_TOGGLEBUTTON(self, self.bt3.GetId(), self.OnPress)
     
        def OnPress(self, event):
            if event.GetEventObject().GetValue() == True:
                if event.GetEventObject().GetLabel() == "Bt1":
                    self.bt2.SetValue(False)
                    self.bt3.SetValue(False)
                elif event.GetEventObject().GetLabel() == "Bt2":
                    self.bt1.SetValue(False)
                    self.bt3.SetValue(False)
                else:
                    self.bt1.SetValue(False)
                    self.bt2.SetValue(False)
     
    class MonApp(wx.App):
        def OnInit(self):
            f = Fenetre()
            f.Show(True)
            self.SetTopWindow(f)
            return True
     
    app = MonApp()
    app.MainLoop()

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Par défaut
    je n'arrive pas a faire fonctionner le bazar. Mes boutons toggle sont des bitmap toggle button, le pb viendrait-il de la ? merci

    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
     
    # -*- coding: iso-8859-1 -*-
     
    import wx
    import buttons
     
    #-------------------------------------------------------------------
     
    #===================================================================
    #== Panneau contenant les boutons de selection (arête,sommet,face)==
    #===================================================================
     
    class PanneauSelect(wx.Panel):
    	def __init__(self,parent):
    		wx.Panel.__init__(self,parent,-1,style = wx.DOUBLE_BORDER)
     
    		boxSelec = wx.StaticBox(self, -1, "Types de sélection")
    		bsizerS = wx.StaticBoxSizer(boxSelec, wx.HORIZONTAL)
     
    		som = wx.Bitmap("../images/selecSom.gif", wx.BITMAP_TYPE_GIF)
    		arete = wx.Bitmap("../images/selecArete.gif", wx.BITMAP_TYPE_GIF)
    		face = wx.Bitmap("../images/selecFace.gif", wx.BITMAP_TYPE_GIF)
     
     
    		#Toggles Boutons : sélections de sommets, d'arêtes et de faces
    		selecSom = buttons.GenBitmapToggleButton(self, 1, None)
    		selecSom.SetBitmapLabel(som)
     
    		selecArete = buttons.GenBitmapToggleButton(self, 2, None)
    		selecArete.SetBitmapLabel(arete)
     
    		selecFace = buttons.GenBitmapToggleButton(self, 3, None)
    		selecFace.SetBitmapLabel(face)
     
     
    		selecSom.SetToolTipString("sélection de sommets")
    		selecArete.SetToolTipString("sélection d'arêtes")
    		selecFace.SetToolTipString("sélection de faces")
     
     
    		bsizerS.Add(selecSom, 1, wx.ALL|wx.LEFT, 2)
    		bsizerS.Add(selecArete, 1, wx.ALL|wx.LEFT, 2)
    		bsizerS.Add(selecFace, 1,wx.ALL|wx.LEFT, 2)
     
     
    		sampleList = ['Fil de fer', 'Texture', 'Texture + Eclairage']
     
    		rb = wx.RadioBox(self, -1, "Visualisation",wx.DefaultPosition, wx.DefaultSize,sampleList, 1, wx.RA_SPECIFY_COLS)
     
     
     
            	border = wx.BoxSizer()
            	border.Add(bsizerS, 1, wx.SHAPED|wx.ALL, 10)
    		border.Add(rb, 1, wx.SHAPED|wx.ALL, 11)
     
            	self.SetSizer(border)
     
    #-----------------------------
    		#wx.EVT_TOGGLEBUTTON(self, selecSom.GetId(), self.OnToggleButton) 
    		#wx.EVT_TOGGLEBUTTON(self, selecFace.GetId(), self.OnToggleButton) 
    		#wx.EVT_TOGGLEBUTTON(self, selecArete.GetId(), self.OnToggleButton) 
     
    		self.Bind(wx.EVT_TOGGLEBUTTON, self.OnToggleButton, selecSom)
    		self.Bind(wx.EVT_TOGGLEBUTTON, self.OnToggleButton, selecArete)
    		self.Bind(wx.EVT_TOGGLEBUTTON, self.OnToggleButton, selecFace)
     
    #-----------------------------
     
    #===================
    #==	Fonctions	==  
    #===================
     
    	def OnToggleButton(self, event):
    		if event.GetEventObject().GetValue() == True:
    			if event.GetEventObject().GetId() == 1: #bouton de sélection des sommets
    				selecArete.SetValue(False)
    				selecFace.SetValue(False)
    				#appliquer la fonction de sélection des sommets
    			elif event.GetEventObject().GetId() == 2: #bouton de sélection des arètes
    				selecFace.SetValue(False)
    				selecSom.SetValue(False)
    				#appliquer la fonction de sélection des arètes
    			else:
    				selecArete.SetValue(False)
    				selecSom.SetValue(False)
    				#appliquer la fonction de sélection des faces

  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
    Je pense que ça ne marche pas parce que tu n'a pas référencé tes boutons comme des attributs de ta classe PanneauSelect.

    Ton code de déclaration des boutons doit être réécrit 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
    17
    18
    19
        #Toggles Boutons : sélections de sommets, d'arêtes et de faces
          self.selecSom = buttons.GenBitmapToggleButton(self, 1, None)
          self.selecSom.SetBitmapLabel(som)
     
          self.selecArete = buttons.GenBitmapToggleButton(self, 2, None)
          self.selecArete.SetBitmapLabel(arete)
     
          self.selecFace = buttons.GenBitmapToggleButton(self, 3, None)
          self.selecFace.SetBitmapLabel(face)
     
     
          self.selecSom.SetToolTipString("sélection de sommets")
          self.selecArete.SetToolTipString("sélection d'arêtes")
          self.selecFace.SetToolTipString("sélection de faces")
     
     
          bsizerS.Add(self.selecSom, 1, wx.ALL|wx.LEFT, 2)
          bsizerS.Add(self.selecArete, 1, wx.ALL|wx.LEFT, 2)
          bsizerS.Add(self.selecFace, 1,wx.ALL|wx.LEFT, 2)
    Quant à ta fonction OnToggleButton(), elle doit être complétée comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       def OnToggleButton(self, event):
          if event.GetEventObject().GetValue() == True:
             if event.GetEventObject().GetId() == 1: #bouton de sélection des sommets
                self.selecArete.SetValue(False)
                self.selecFace.SetValue(False)
                #appliquer la fonction de sélection des sommets
             elif event.GetEventObject().GetId() == 2: #bouton de sélection des arètes
                self.selecFace.SetValue(False)
                self.selecSom.SetValue(False)
                #appliquer la fonction de sélection des arètes
             else:
                self.selecArete.SetValue(False)
                self.selecSom.SetValue(False)
                #appliquer la fonction de sélection des faces
    En effet, sans le mot clé self, les objets référencés dans une méthode ne sont pas accessibles dans une autre méthode de la même classe.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Par défaut
    non ca ne marche toujours pas. tous les boutons restent enfoncés. J'ai l'impression que les événements ne sont pas détectés.

  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
    Citation Envoyé par hysah
    non ca ne marche toujours pas. tous les boutons restent enfoncés. J'ai l'impression que les événements ne sont pas détectés.
    Bon j'ai testé et j'ai vu le problème.

    Le GenBitmapToggleButton n'est pas un wxWidget officiel, et tout n'y a pas été implémenté, notamment la macro wx.EVT_TOGGLEBUTTON.

    Tu remplaces les macros d'évènements de ton code par celles-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            wx.EVT_BUTTON(self, self.selecSom.GetId(), self.OnToggleButton)
            wx.EVT_BUTTON(self, self.selecFace.GetId(), self.OnToggleButton)
            wx.EVT_BUTTON(self, self.selecArete.GetId(), self.OnToggleButton)
    et ça va marcher...

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Par défaut
    ok Merci ca marche !!!!!!

  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
    Edit : Annulé

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

Discussions similaires

  1. Etat toggle bouton
    Par stefan73 dans le forum NetBeans
    Réponses: 5
    Dernier message: 12/06/2011, 17h14
  2. Réponses: 4
    Dernier message: 25/05/2009, 18h20
  3. [JList] Colorer lignes selectionnées après clic bouton
    Par M€lK!oR dans le forum Composants
    Réponses: 15
    Dernier message: 27/01/2009, 19h50
  4. bouton entree plusieurs fois sur un form
    Par lili2704 dans le forum Struts 1
    Réponses: 5
    Dernier message: 29/06/2007, 14h19
  5. [MFC] Checker plusieurs bouton en une fois
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 08/03/2006, 17h10

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