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

Python Discussion :

Exécution séquentielle de fonctions en python


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Exécution séquentielle de fonctions en python
    Bonjour,

    J'ai créé une interface en pygtk. Quand je clique sur le bouton du correcteur orthographique, il exécute la fonction on_Abc_clicked. Voici le 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
    def on_Abc_clicked(self, widget):
        def abc():
                    def validAbc(self,widget):
                            chk_dlg.updateUI()
                            textbuff = buff.get_buffer()
                            textbuff.set_text(chkr.get_text())
                            chk_dlg.destroy()
                    for zone in [self.desc,self.ingr,self.prep,self.cons]:
                            if zone.has_focus():
                                    buff=zone
                                    textbuffer = zone.get_buffer()
                                    text = textbuffer.get_text(textbuffer.get_start_iter(),textbuffer.get_end_iter())
                                    printf(["BEFORE:", text])
                                    chkr = SpellChecker("fr",text)
                                    chk_dlg = GtkSpellCheckerDialog()
                                    chk_dlg.set_icon_from_file('favicon1.ico')
                                    chk_dlg.show()
                                    chk_dlg.connect('delete_event', validAbc)
                                    chk_dlg.setSpellChecker(chkr)
                                    chk_dlg.updateUI()
        self.desc.grab_focus()
        abc()
        self.ingr.grab_focus()
        abc()
    Ce qui est exécuté en premier est donc ce qui est à la fin, en gras.
    C'est là que mon problème se pose : les 2 commandes abc se lancent simultanément et donc 2 fenêtres s'ouvrent en même temps. Ce que je voudrais, c'est que la seconde commande abc se lance quand la première est terminée.

    Comment puis-je faire ceci ?

    En vous remerciant par avance pour votre aide,

    Floréal.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Solution
    Bon,

    J'ai trouvé une solution tout seul (comme un grand ). Comme je suis sympa, je vous met le code qui marche :

    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
    def on_Abc_clicked(self, widget):
         def abc(zone):
                    def validAbc(self,widget):
                            chk_dlg.updateUI()
                            textbuff = buff.get_buffer()
                            textbuff.set_text(chkr.get_text())
                            chk_dlg.destroy()
                            if buff == desc:
                                    abc(ingr)
                            elif buff == ingr:
                                    abc(prep)
                            elif buff == prep:
                                    abc(cons)
                            elif buff == cons:
                                    print "DONE !"
                    buff=zone
                    desc=self.desc
                    ingr=self.ingr
                    prep=self.prep
                    cons=self.cons
                    suivant=abc
                    textbuffer = zone.get_buffer()
                    text = textbuffer.get_text(textbuffer.get_start_iter(),textbuffer.get_end_iter())
                    printf(["BEFORE:", text])
                    chkr = SpellChecker("fr",text)
                    chk_dlg = GtkSpellCheckerDialog()
                    chk_dlg.set_icon_from_file('favicon1.ico')
                    chk_dlg.show()
                    chk_dlg.connect('delete_event', validAbc)
                    chk_dlg.setSpellChecker(chkr)
                    chk_dlg.updateUI()
     
         abc(self.desc)
    Donc ce qui a changé :
    Maintenant, le premier abc va lancer le second, et ainsi de suite. Ainsi, tout se fait nécessairement dans l'ordre. Certains diront que c'est contourner le problème, mais ça marche et pour ce que je veux faire ça convient parfaitement

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

Discussions similaires

  1. Exécution séquentielle de 3 fonctions JS
    Par bronon dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/01/2015, 10h46
  2. Réponses: 3
    Dernier message: 11/03/2006, 16h35
  3. Exécuter simultanément plusieurs fonctions
    Par benj63 dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/10/2005, 17h42
  4. Pause dans l'exécution d'une fonction
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/06/2005, 08h48
  5. Exécution d'une fonction...
    Par mickeliette dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/11/2004, 17h59

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