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

Tkinter Python Discussion :

Mettre fonction pause lors d'un clic


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Mettre fonction pause lors d'un clic
    Bonjour,

    Voila je suis en train de faire un application dont la partie principale lance une fonction tourne tout le temps (elle traite des données et affiche du texte dans un Label). Je voudrais faire en sorte que lorsque l'on appuie sur un bouton pause la fonction principale s'arrete et qu'un autre fonction se lance (Elle affiche un message dans le label et sauve un fichier).

    Voila merci d'avance.

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    salut, il faut passer par un controle par changement d'etat d'une variable :
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def mon_control(a):
        if a==0:
              ma_fonction1()
        elif a==1:
              ma_fonction2()
    tu lance ton thread sur "mon_control(a)"

    pour controler le changement d'état, tu donne comme commande a tes boutons, la fonction mon_control(a) avec la valeur de a passé en argument en focntion de ce que doit déclencher le bouton.

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tkButton(root,text='ma_fonction1",command=lambda a=0:mon_control(a))
    pareil pour ton autre bouton en modifiant la valeur de a.

    Le code est a compléter mais le principe est là.


    ++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci mais ton script lance deux fonctions et n'arrete pas la première (je crois) sinon j'ai trouvé un script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def main():
      if flag == 1:
             # continue...
    def stop():
         global flag
         flag = 0
     
    global flag
    flag = 1
    bou1 = Button(fen,text='Pause', width =8, command=stop)
    bou2 = Button(fen,text='Lancer', width =8, command=main)
    Lui il marche
    Mais j'ai toujours un problème à savoir que lorsque je lance main la fonction se lance mais je ne peux plus cliquer sur Pause, le programme se plante si je clique enfin bref je n'ai plus la main.
    J'utilise un label donc je fais changer la valeur text pour informer de l'état de l'avancement (c'est la bonne méthode ?).

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    salut, c'est parce que tu ne dois pas utiliser les threads dans ton prog.
    Si tu veux faire tourner des fonction en continu et controler leur exécution via une interface, il faut que tu crée des thread.L'appli se lance et crée un thread principal (en général ce thread controle ton interface)
    tu crée un autre thread qui permet de lancer en parallèle une autre fonction.
    ensuite la mèthode que je t'ai donné est semblable a un chemin de fer.
    tu aiguille ton programme pour executer une fonction a la place d'une autre et ce en fonction de la condition passée en argument.
    La boucle se fait sur cette fonction et non sur la fonction que tu veux voir exécuté.
    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def aiguillage(condition):
     
         while condition!=0: ## boucle si condition ne vaut pas 0
              if condition==1: 
                    mafonction1() ## excute "mafonction1" si condition =1
              elif condition ==2: 
                    mafonction2() ## excute "mafonction2" si condition =2
     
     
         time.sleep(1) ## pause d'1 seconde avant de continuer
         aiguillage(condition)    ## la fonction aiguillage s'appelle elle-même.
    ensuite tu ecrit tes fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mafonction1():
         print "c'est ma fonction 1"
         time.sleep(1) ## pour éviter de figer ton programme 
     
    mafonction2():
         print "c'est ma fonction 2"
         time.sleep(1)
    et enfin tu peux ajouter un fonction que tu associera a un bouton supplémentaire pour suspendre ton traitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def suspendre(condition)
         if condition!=0:
             condition=0
    voilà. je pense que pour la dernière partie il faut ajuster mais je t'assure que le principe fonctionne trés bien.

  5. #5
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup, je regarde ça ! Pour les threads je vais bouquiner !

Discussions similaires

  1. Effet d'une fonction disparait lors d'un clic
    Par MlleL dans le forum jQuery
    Réponses: 1
    Dernier message: 07/03/2013, 21h13
  2. Pause lors d'un clic sur un diaporama Flexslider
    Par Mister Paul dans le forum jQuery
    Réponses: 2
    Dernier message: 09/11/2012, 14h49
  3. Réponses: 1
    Dernier message: 25/10/2009, 13h39
  4. Afficher un total avec une fonction lors d'un clic d'une case à cocher
    Par sandddy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/02/2009, 09h52
  5. fonction appliquant une class lors d'un clic
    Par nicoaix dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 14/05/2008, 10h16

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