Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/04/2013, à 10:28

ibra21

wx python : gérer des événements de click sur un bouton

Bonjour je suis nouveau en wxPython. J'ai écris un petit script dans lequel il y a 2 boutons l'un pour Valider et l'autre pour Quitter mais à chaque fois que je cliques soit n'importe lequel des boutons c'est l'événement associé à Quitter qui s'exécute.
Que dois je faire?

Hors ligne

#2 Le 06/04/2013, à 10:30

pingouinux

Re : wx python : gérer des événements de click sur un bouton

Bonjour,

Que dois je faire?

Peut-être nous montrer le script…

Hors ligne

#3 Le 06/04/2013, à 10:42

ibra21

Re : wx python : gérer des événements de click sur un bouton

pingouinux a écrit :

Bonjour,
Peut-être nous montrer le script…

le voici :

#!/usr/bin/python
# -*- coding:utf-8 -*
import wx
class Frame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self,parent,id,title,size=(350,250), style=wx.DEFAULT_DIALOG_STYLE)
        sizer = wx.GridBagSizer()
        self.panel = wx.Panel(self,-1)
        sizer.Add(self.panel,(-1,self.GetSize().y),(-1,self.GetSize().y),wx.EXPAND)
       
        self.bouton = wx.Button(self, 5, "DEMARRER", (120, 85))
        self.bouton.SetFocus()
        self.Bind(wx.EVT_BUTTON, self.OnNetoyer)
       
        self.bouton = wx.Button(self, 6, "QUITTER", (240, 200))
        self.Bind(wx.EVT_BUTTON, self.OnQuitter)
       
    def OnNetoyer(self, event):
        self.bouton.Destroy()
        self.taillematrice()
   
    def OnQuit(self, event):
        self.Destroy()
       
       
class MyApp(wx.App):
    def OnInit(self):
        frame = Frame(None,-1,"MyApp")
        frame.Center()       
        frame.Show(True)
        return True


app = MyApp(0)
app.MainLoop()

Hors ligne

#4 Le 06/04/2013, à 11:59

Jules Petibidon

Re : wx python : gérer des événements de click sur un bouton

Hello,

alors déjà :

        self.bouton = wx.Button(self, 5, "DEMARRER", (120, 85))
        self.bouton.SetFocus()
        self.Bind(wx.EVT_BUTTON, self.OnNetoyer)
       
        self.bouton = wx.Button(self, 6, "QUITTER", (240, 200))
        self.Bind(wx.EVT_BUTTON, self.OnQuitter)

tu lie tes deux boutons à la même propriété : La seconde affectation écrase la première. Du coup ça sert un peu à pas grand chose. Mais en même temps c'est pas ça qui pose soucis.

Ton problème vient plutot de là :

        self.Bind(wx.EVT_BUTTON, self.OnNetoyer)
        ...
        self.Bind(wx.EVT_BUTTON, self.OnQuitter)

Tu fais une erreur similaire. Les événements EVT_BUTTON sont liés à ta fenetre, qui n'a aucun moyen d'identifier l'emetteur. Je sais pas comment wx gère ça, mais soit il exécute les deux fonctions enrgistrées dans l'ordre, soit la dernière fonction enregistrée écrase la précédente.

Une proposition de correction (codée à la rache et non testée):

        self.bouton1 = wx.Button(self, 5, "DEMARRER", (120, 85))
        self.bouton1.SetFocus()
        self.bouton1.Bind(wx.EVT_BUTTON, self.OnNetoyer)
       
        self.bouton2 = wx.Button(self, 6, "QUITTER", (240, 200))
        self.bouton2.Bind(wx.EVT_BUTTON, self.OnQuitter)

Sachant qu'à moins d'un besoin explicite, lier les boutons à l'instance est inutile

self.bouton1 = ...

et

bouton1 = ...

fonctionneront aussi bien et éviteront de polluer la classe avec des propriétés inutiles

Petit bonus trololo :
Si tu as le choix entre des libs graphiques : wx est très bien mais dispose d'une doc assez pourrie
C'est aussi le cas de GTK.
Par contre Qt dispose d'une très bonne documentation, c'est plus facile du coup smile

Et sinon tu as des tuto assez pratiques pour se mettre le pied à l'étrier ici : http://zetcode.com

Hors ligne