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 :

un after qui bloque.


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 24
    Points : 18
    Points
    18
    Par défaut un after qui bloque.
    Bonjour
    J'utilise python 3.7

    J'ai mis mes agrumes dans mon chalet pour le froid. J'ai conçu avec un µC PIC, un montage radio UHF qui transmet les températures intérieures et extérieures de mon chalet avec la commande G.
    Quand j'envoie avec mon bouton, c'est OK, je reçois du bout de mon jardin les infos.
    J'ai voulu faire un automatisme de cette demande G toutes les 20 secondes avec after, mais après avoir inséré la commande after elle semble envoyer une seule fois la commande et c'est fini.
    D'ailleurs j'aimerais même activer ou désactiver à l'aide d'un bouton, par exemple cet "after " qui bloque et j'espère que vous trouverez pourquoi , car j'ai bien essayé de nombreuses combinaisons.
    PS: Toujours pas trouvé non plus comment avoir mon scrollbar sur toute la longueur de ma textbox...
    Merci
    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
     
     
    # -- coding: cp1252 --
     
     
    # script de controle temperature dans le chalet
     
     
    import time
    import tkinter as tk
    import serial
    import io
     
    COM = 'COM6'
    IDN = "Unknow"
     
     
    def scan():
        available = []
        for i in range(256):
            try:
                s = serial.Serial('COM'+str(i))
                available.append( (s.portstr))
                s.close()   # explicit close 'cause of delayed GC in java
            except serial.SerialException:
                pass
     
        for s in available:
            print ("%s" % (s))    #str
     
     
    print ("Found ports:")
    scan()
     
    ser = serial.Serial()
    ser.baudrate = 9600
    ser.port = COM
    ser.parity = serial.PARITY_NONE
    ser.stopbits=serial.STOPBITS_ONE
    ser.bytesize = serial.EIGHTBITS
    ser.timeout=.5
    ser.open()
     
     
    def sortie():                           # quitter le prog
        ser.close()
        app.destroy()
     
     
    def send_value(value):
        print (value)
        ser.write(value.encode())
        ser.write('\r'.encode())
        buffer = ""
        #while True:
        #    oneByte = ser.read(1)
        #    if oneByte == b"\n":    #method should returns bytes
        #        print (buffer)
        #        break
        #    else:
        #        buffer += oneByte.decode()
     
        retour = ser.readline()
        window.insert(tk.INSERT,retour)
        print (retour.decode("ascii",errors="ignore"))
        idn.config(text=retour.decode("ascii",errors="ignore"))
        #app.update
     
     
     
     
    if __name__ == '__main__':          # 
        app = tk.Tk()
     
        app.geometry('400x500+800+300')
        app.title('Chalet Serie')
     
        tk.Label(text='Entrer port COM et ->').place(x=18,y=15)
        ip_label = tk.Label(text=COM)            # l'adresse port COM
        ip_label.place(x=250,y=15)
     
        tk.Label(text='Relève').place(x=18,y=45)
        tk.Button(text= 'Go',command=lambda:send_value('G') ,fg = "blue").place(x=200,y=40)
        idn = tk.Label(text = IDN)
        idn.place(x=250,y=40)
     
        tk.Label(text='mode Auto').place(x=18,y=75)
        tk.Button(text= 'Go',command=lambda:send_value('A') ,fg = "red").place(x=200,y=70)
     
     
        tk.Label(text='mode Manuel').place(x=18,y=105)
        tk.Button(text= 'Go',command=lambda:send_value('M') ,fg = "red").place(x=200,y=100)
     
        tk.Label(text='Active Chauffage').place(x=18,y=135)
        tk.Button(text= 'Go',command=lambda:send_value('H') ,fg = "red").place(x=200,y=130)
     
     
        tk.Label(text='stoppe chauffage').place(x=18,y=165)
        tk.Button(text= 'Go',command=lambda:send_value('C') ,fg = "red").place(x=200,y=160)
     
     
        scrollbar = tk.Scrollbar(app)
     
        window = tk.Text(app, heigh=10,width=45,yscrollcommand=scrollbar.set)
        window.place (x=10,y=220)
        scrollbar.place (x=372,y=250)
        scrollbar.config(command=window.yview)
     
        app.after(5000,lambda:send_value('G'))
     
        tk.Button(text= 'QUIT',command=sortie).place(x=195,y=440) 
     
        app.mainloop()

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ben oui ça ne s'exécute qu'une seule fois.
    Timer est fait pour cela.
    À ajouter à la fin de la fonction send_value()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    from threading import Timer
     
    def send_value(value):
        ....
        Timer(20, send_value, args='G').start()

  3. #3
    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 hherve Voir le message
    par exemple cet "after " qui bloque et j'espère que vous trouverez pourquoi , car j'ai bien essayé de nombreuses combinaisons
    after ordonnance une seule fois l'appel à la fonction.
    Si vous voulez que çà se répète, il faudra répéter les appels à after (par exemple dans le corps de la fonction).
    Vous avez un exemple d'animation tkinter dans le Swinnen qui vous montre comment utiliser çà.

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

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Merci Messieurs, je bloquais moi aussi.
    J'ai testé le code de VinsS, c'est OK pour moi
    Oui Wiztricks merci pour le lien
    Bon Dimanche

  5. #5
    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
    Citation Envoyé par hherve Voir le message
    Merci Messieurs, je bloquais moi aussi.
    J'ai testé le code de VinsS, c'est OK pour moi
    Sauf que vous n'êtes pas supposé modifier le GUI depuis un thread (et que si vous avez un soucis, on vous demandera d'utiliser .after à la place.).

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

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

Discussions similaires

  1. Spyware qui bloque le fond d'écran Windows
    Par akli_agha dans le forum Sécurité
    Réponses: 6
    Dernier message: 02/02/2006, 17h16
  2. pc qui bloque et message du BIOS
    Par ouldfella dans le forum Ordinateurs
    Réponses: 4
    Dernier message: 13/10/2005, 14h22
  3. Réponses: 3
    Dernier message: 22/07/2005, 15h16
  4. [MFC] fonction ReadFile qui bloque
    Par r0d dans le forum MFC
    Réponses: 9
    Dernier message: 15/04/2005, 13h21
  5. Réponses: 6
    Dernier message: 21/03/2005, 13h22

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