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 :

Start et stop de plusieures boucles simultanées [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Start et stop de plusieures boucles simultanées
    Bonjour,

    J'ai un problème dont je ne trouve pas de solution à mon niveau car je suis débutant…

    Voila j'ai créé une interface graphique avec plusieurs boutons Start et Stop. Quand je clique sur start je démarre une boucle avec after et quand j'appuie sur stop j'arrête la boucle. Ca c'est OK. Mais dans mon interface j'ai plusieurs boutons start liés à autant de boutons stop. Je peux donc lancer plusieurs boucles en même temps.

    Mon problème est quand j'appuie sur stop, je n'arrête pas forcement la boucle qui a été démarré avec le start correspondant...

    Voici mon code, quelqu'un peut-il m'aiguiller ? Merci d'avance.

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
    from tkinter import *
    import matplotlib.pyplot as plt
    import sqlite3
    import datetime
    from xlsxwriter.workbook import Workbook
    import glob
    import os
    import time
     
    root =Tk()
    root.title("IrraSurvey")
    root.geometry("800x600")
     
    def chambre(x):
     
        def start(x):
            lancer.configure(state=DISABLED)
            stopper.configure(state=NORMAL)
            maj.configure(state=NORMAL)
            calculer.configure(state=NORMAL)
     
            def patient_name(event):
                global dbname
                date = datetime.datetime.now()
                day = str(date.day)
                month = str(date.month)
                year = str(date.year)
                dbname = ("Chambre"+str(x)+" - "+entree.get()+" - "+day+month+year)
                conn = sqlite3.connect(dbname+".db")
                cursor = conn.cursor()
                cursor.execute('''CREATE TABLE IF NOT EXISTS Décroissance(
                Point TXT,
                Valeur TXT,
                Temps TXT
                )''')
                conn.close
                fenetre.destroy()
            fenetre = Tk()
            fenetre.title("Patient")
            value = StringVar(fenetre)
            value.set("Nom du patient")
            entree = Entry(fenetre, textvariable=value, width=30)
            entree.pack()
            entree.bind("<Return>", patient_name)
            bcl = None
            def request():
                bcl = str("boucle"+str(x))
                print("requete LB 5340  "+str(x))
                bcl = root.after(1000,request)
            bcl = root.after(1000,request)
            fenetre.mainloop()
            return
     
        def stop(x):
            workbook = Workbook(dbname+'.xlsx')
            worksheet = workbook.add_worksheet()
            conn=sqlite3.connect(dbname+".db")
            c=conn.cursor()
            c.execute("select * from Décroissance")
            mysel=c.execute("select * from Décroissance ")
            for i, row in enumerate(mysel):
                for j, value in enumerate(row):
                    worksheet.write(i, j, value)
            workbook.close()
            conn.close
            bcl = str("boucle"+str(x))
            root.after_cancel(bcl)
            print("STOP")
            maj.configure(state=DISABLED)
            stopper.configure(state=DISABLED)
            calculer.configure(state=DISABLED)
            lancer.configure(state=NORMAL)
            return
     
        def calcul(x):
            fic = ('Chambre'+str(x)+'*.db')
            newest = max(glob.iglob(fic), key=os.path.getctime)
            print(newest)
            conn=sqlite3.connect(newest)
            c=conn.cursor()
            c.execute('SELECT Valeur FROM Décroissance')
            data = c.fetchall()
            conn.close
            plt.plot(data)
            plt.show()
            return
     
        def update_val(x):
            try:
                fic = ('Chambre'+str(x)+'*.db')
                newest = max(glob.iglob(fic), key=os.path.getctime)
                print(newest)
                conn=sqlite3.connect(newest)
                c=conn.cursor()
                c.execute('SELECT Valeur FROM Décroissance ')
                data = c.fetchall()
                lenght = (len(data))-1
                dat = (data[lenght])
                root.update_idletasks()
                print(dat)
                lblmaj = Label(root, text=dat).grid(row=x,column=4, padx = 5, pady = 20)
            except IndexError:
                fenetre = Tk()
                fenetre.title("Erreur")
                value = StringVar(fenetre)
                value.set("Pas assez de valeurs dans la base")
                lbl = Label(fenetre, textvariable=value, width=50)
                lbl.pack()
                lbl.mainloop()
            except NameError:
                fenetre = Tk()
                fenetre.title("Erreur")
                value = StringVar(fenetre)
                value.set("Pas de base disponible, la mesure est-elle lancée ?")
                lbl = Label(fenetre, textvariable=value, width=50)
                lbl.pack()
                lbl.mainloop()
     
        lancer = Button(root,text="Start",command=lambda:start(x))
        lancer.grid(row=x,column=0, padx = 5, pady = 20)
        stopper = Button(root,text="Stop",command=lambda:stop(x))
        stopper.grid(row=x,column=1, padx = 5, pady = 20)
        calculer = Button(root,text="Calcul",command=lambda:calcul(x))
        calculer.grid(row=x,column=2, padx = 5, pady = 20)
        maj = Button(root,text="MAJ valeurs",command=lambda:update_val(x))
        maj.grid(row=x,column=3, padx = 5, pady = 20)
        maj.configure(state=DISABLED)
        stopper.configure(state=DISABLED)
        calculer.configure(state=DISABLED)
        return
     
     
    for c in range(0,9):
        chambre(c)
    root.mainloop()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Tony1978 Voir le message
    Voici mon code, quelqu'un peut-il m'aiguiller ?
    Plutôt que de poster 150 lignes de code pas très jolies à lire, il serait plus simple de poster un code minimal qui reproduise le problème à résoudre.

    De toutes façons, relisez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           bcl = None
            def request():
                bcl = str("boucle"+str(x))
                print("requete LB 5340  "+str(x))
                bcl = root.after(1000,request)
            bcl = root.after(1000,request)
    La première assignation à bcl = str("boucle"+str(x)) sera écrasé par la seconde bcl = root.after(1000, request).
    Pour associer x à l'identifiant retourné par root.after, il faut, par exemple, passer par un dictionnaire accessible via une variable globale dico et ce bout de code devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            def request():
                print("requete LB 5340  "+str(x))
                dico[x] = root.after(1000,request)
            dico[x] = root.after(1000,request)
    Mais çà ne corrigera pas les autres erreurs qu'il y a dans ce code.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bjr,

    OK j'ai pu avancer sur mon problème ça marche. Merci bien.

    OK je prends note, je posterai que l'essentiel la prochaine fois.

    Mon code a beaucoup d'erreurs ? Oui ! Je suis débutant ! Je suis preneur si tu m'indique où sont mes erreurs.

    Merci en tout cas.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Tony1978 Voir le message
    Oui ! Je suis débutant ! Je suis preneur si tu m'indique où sont mes erreurs.
    Il y en a trop. Chacune demanderait des explications, c'est du temps que je n'ai pas d'autant que vous les trouveriez dans tous les tutos ou dans la documentation.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    OK.

    Merci en tout cas.

    Bonne soirée.

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

Discussions similaires

  1. Boutton Start et Stop pour une boucle while
    Par glokker dans le forum Général Python
    Réponses: 2
    Dernier message: 13/03/2018, 14h37
  2. Réponses: 6
    Dernier message: 04/06/2009, 19h48
  3. [CrystalReport]ouvrir plusieur états simultanément
    Par mcrocher dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 23/03/2005, 17h14
  4. Réponses: 6
    Dernier message: 15/04/2004, 11h04
  5. [KeyEvent] plusieurs touches simultanées enfoncées
    Par gege2mars dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 07/01/2004, 11h44

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