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 :

[Python 2.x] Probleme de binding bouton start


Sujet :

wxPython

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 31
    Points
    31
    Par défaut [Python 2.x] Probleme de binding bouton start
    Bonjour,

    je suis en train d'essayer de faire un chronomètre avec quelques spécificités (avec de la possibilité de faire un son à certaines secondes). Dans un premier temps j'ai un soucis avec le bouton start. En effet je voudrais que le chrono se lance quand j'appuie sur start, or le chrono se lance au démarrage du programme et l'affichage lui ne commence que lorsque j'appuie sur le bon bouton.

    Voici le code concernant le timer, le bouton en question et l'évènement :

    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
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import wx
     
    class MyFrame(wx.Frame):
        def __init__(self, parent, id, title):
            wx.Frame.__init__(self, parent, id, "Timer", wx.DefaultPosition, wx.Size(310, 150),style= wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)
     
            self.tZero=time.time() #Récupération de tZero
            self.t=time.time()-self.tZero # Temps après tZero
            self.timer=wx.Timer(self, 1)
     
            panel = wx.Panel(self, -1)
     
            self.buttonStart = wx.BitmapButton(panel, -1, wx.Bitmap(pngLib[0]), pos=(160,93), size=(25,25))
            self.Bind(wx.EVT_BUTTON, self.Start, self.buttonStart)
     
        def Timer(self, event):
            self.t=time.time() -self.tZero
                # Crée un temps en seconde 4.84287779592 (0=01/01/1970)
            tiTuple=time.gmtime(self.t)
                # Conversion en tuple (1970, 1, 1, 0, 0, 4, 3, 1, 0) 
            reste=self.t-tiTuple[3]*3600.0-tiTuple[4]*60.0-tiTuple[5]*1.0
                # Recupération du reste    
            resteS=("%.2f" % reste )[-2::]
                #Affiche les dixièmes et centièmes de l'arrondi ex: 84
            tt=time.strftime("%M:%S", tiTuple)+"."+resteS
            self.clock.SetLabel(tt)
     
        def Start(self, clock):
            self.Bind(wx.EVT_TIMER, self.Timer, self.timer)
            self.timer.Start(50)
     
    class MyApp(wx.App):
        def OnInit(self):
            frame = MyFrame(None, -1, 'layout.py')
            frame.SetIcon(wx.Icon('G.ico', wx.BITMAP_TYPE_ICO))
            frame.Show(True)
            #frame.timer.Start(50)
            frame.Centre()
            return True
     
    if __name__=='__main__':    
     
        app = MyApp(0)
        app.MainLoop()
    Dans mon esprit l'activation du bouton devrait engendrer le début du timer or ça n'est pas le cas.

    Est-ce que quelqu'un aurait une suggestion pour répondre à mon problème ?


    Cordialement,

    Unic0

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 163
    Points
    163
    Par défaut
    D'où sort la var clock ? Que contient layout.py ? ....

    Bon je me suis débrouillé tout seul comme un grand avec ce que j'avais... Tu peux tester directement comme ça puis réajuster :

    Du coup n'oublies pas de réimporter ton "layout.py" si nécessaire(ligne 63 j'ai mis un "None" à la place pour mes tests) et de remettre des "wx.BitmapButton" à la place des "wx.Button" que j'ai mis

    Ah oui et n'oublies pas de dé-commenter l'icône de ta frame (ligne 64)

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import wx
    import time
     
    class MyFrame(wx.Frame):
        def __init__(self, parent, id, title):
            global tZero,timer,pause
            wx.Frame.__init__(self, parent, id, "Timer", wx.DefaultPosition, wx.Size(310, 150),style= wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)
            #Panel pour affichage
            self.panel = wx.Panel(self, -1)
     
            #Init Timer
            timer=wx.Timer(self,1)
            tZero=time.time() #Récupération de tZero
            pause=0
     
            #Boutons
            self.buttonStart = wx.Button(self.panel,-1,"START/RESUME", pos=(25,93))
            self.Bind(wx.EVT_BUTTON, self.Start, self.buttonStart)    
     
            self.buttonStop = wx.Button(self.panel,-1,"STOP/PAUSE" , pos=(190,93))
            self.Bind(wx.EVT_BUTTON, self.Stop, self.buttonStop)
     
     # Fonctions
     
        def Timer(self,evt):
            global tZero,timer,tpause
            if pause==0:
                t=time.time()-tZero # Temps après tZero
            else:
                t=time.time()-tpause
     
                # Crée un temps en seconde 4.84287779592 (0=01/01/1970)
            tiTuple=time.gmtime(t)
                # Conversion en tuple (1970, 1, 1, 0, 0, 4, 3, 1, 0) 
            reste=t-tiTuple[3]*3600.0-tiTuple[4]*60.0-tiTuple[5]*1.0
                # Recupération du reste    
            resteS=("%.2f" % reste )[-2::]
                #Affiche les dixièmes et centièmes de l'arrondi ex: 84
            tt=time.strftime("%M:%S", tiTuple)+"."+resteS
            affich=wx.StaticText(self.panel, -1,str(tt))
            affich.CenterOnParent() #Mets l'affichage du chrono au centre du panel
            affich.SetLabel(tt)
            print tt
     
        def Start(self,evt):
            timer.Start(50)
            self.Bind(wx.EVT_TIMER, self.Timer, timer)
            evt.Skip()
     
        def Stop(self,evt):
            global tpause
            tpause=time.time()
            pause=1
            timer.Stop()
            evt.Skip()
     
        def on_close(evt):#Pour kill le timer si on ferme la frame sans stoper le chrono
            timer.Stop()
            frame.Destroy()
            wx.EVT_CLOSE(frame, on_close)
     
    class MyApp(wx.App):
        def OnInit(self):
            frame = MyFrame(None, -1, None)
            frame.Show(True)
            frame.Centre()
            return True
     
    if __name__=='__main__':    
     
        app = MyApp(0)
        app.MainLoop()
    J'espère que ça correspond à tes attentes

Discussions similaires

  1. probleme avec le bouton refresh du navigateur
    Par Chromatic dans le forum Langage
    Réponses: 7
    Dernier message: 26/02/2006, 12h26
  2. probleme de bind variable
    Par elbrujo2323 dans le forum Oracle
    Réponses: 7
    Dernier message: 22/02/2006, 13h49
  3. [FLASH MX] Probleme avec un bouton flash
    Par kgadhi dans le forum Flash
    Réponses: 8
    Dernier message: 02/12/2005, 14h06
  4. [wxPython] Problème de 'Bind'
    Par Mr Hyde dans le forum wxPython
    Réponses: 6
    Dernier message: 25/08/2005, 16h53
  5. Problème avec bind
    Par jaabouc dans le forum Réseau
    Réponses: 5
    Dernier message: 12/06/2005, 14h32

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