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 petit coup de pouce ]Actualisation + time.sleep


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [Un petit coup de pouce ]Actualisation + time.sleep
    bonsoir,
    que j'explique j'ai codé un chat en python/tkinter , le soucis qui me vient c'est que je n'arrive pas a faire une actualisation automatique des messages recus du serveur --> au client

    pour remedié a ca j'ai fait en attendant un bouton me permettant d'actualiser automatiquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      self.bouton_actualiser = Button(self, text="Actualiser", command=self.actualiser)
            self.bouton_actualiser.pack(side=BOTTOM)
    j'aimerai la remplacer par une boucle infinie avec un time sleep de 0.750s et que cette boucle infini appel ma méthode actualiser , j'ai essayé mais en vain ..

    voici la fonction actualiser :
    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
     def actualiser(self):
            #On recoit les messages du serveur
            messages_recu = self.connexion_avec_serveur.recv(1024)
            messages_recu = messages_recu.decode()
     
     
            nombre_de_messages = 0
            for caractere in messages_recu:
                if caractere == '=':
                    nombre_de_messages += 1
     
            if nombre_de_messages != 1:
                messages_recu = messages_recu.split("=")
            if nombre_de_messages == 1:
                messages_recu = [messages_recu[:-1]]
     
            for message_recu in messages_recu:
                if self.nom_utilisateur in message_recu:
                    couleur = 'red'
                else:
                    couleur = 'blue'
                Label(self, text=message_recu, fg=couleur).pack(fill=X)
    Merci de votre aide d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Vous avez un bon exemple d'intégration de communication réseau avec une interface graphique dans le ici dans le Swinnen.

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

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut,

    Sans trop connaitre tes besoins je penserais à utiliser la methode after() de tkinter qui permet de lancer une methode après x ms. L'idée ici est de definir un objet Queue qui sera partagé entre l'interface et le reste du programme. Cet objet contient les messages du chat. Le programme principale est lancé dans un thread et ajoute à Queue un message de temps en temps. L'interface vérifie de temps en temps (très régulièrement) si un message est present, si oui il est traité, sinon rien.

    Voici un exemple concret avec tkinter:

    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import Tkinter as tk
    import threading, Queue
    import random
    import time
     
    def dummy_func(msg_queue):
        """Function to randomly generate a message"""
        while True:
            x = random.random()
            time.sleep(x)
            msg_queue.put(x)
     
     
    class MainApplication(tk.Frame):
        def __init__(self, master, *args, **kwargs):
            tk.Frame.__init__(self, master, *args, **kwargs)
            self.master = master
            self.msg = Queue.Queue()
            self.periodic_call()
     
            # A label where messages will be displayed
            self.label = tk.Label(self, text='')
            self.label.pack(padx=2, pady=2)
     
            self.run()
     
        def periodic_call(self):
            """Check every 10 ms if there is something new in self.msg"""
     
            # Update label if necessary
            if self.msg.qsize() != 0:
                msg = self.msg.get(0)
                self.label.config(text=msg) 
     
            self.master.after(10, self.periodic_call)
     
        def run(self):
            """Run main application in a thread"""
            thread = threading.Thread(target=dummy_func, args=(self.msg,))
            thread.start()
     
     
    if __name__ == '__main__':
        root = tk.Tk()
        MainApplication(root).pack()
        root.mainloop()
    J

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    D'accord merci , je check ca se soir et je vous dis

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je comprends pas j'y arrive pas ..
    Je veux juste faire une boucle infinie qui effectue une fonction tout les x secondes mais ca veut pas

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par lyonsauvage Voir le message
    Je veux juste faire une boucle infinie qui effectue une fonction tout les x secondes mais ca veut pas
    L'exemple de Julien N vous montre comment y arriver avec un GUI comme Tkinter.
    Je vous ai indiqué un tutoriel à étudier pour comprendre comment fonctionne tout çà.

    Pas la peine d'essayer de coder quoi que ce soit avant d'avoir pris le temps (et oui, apprendre à programmer c'est pas comme jouer avec une zapette) d'avoir compris comment çà fonctionne.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/05/2009, 08h44
  2. -XITI- un petit coup de pouce merci
    Par bojolais dans le forum Outils
    Réponses: 4
    Dernier message: 07/11/2007, 17h38
  3. Petit coup de pouce : gui et bdd
    Par sparko_dutos dans le forum Général Python
    Réponses: 2
    Dernier message: 19/07/2007, 20h51
  4. SDL & GTK besoin d'ub petit coup de pouce :)
    Par hunter99 dans le forum SDL
    Réponses: 1
    Dernier message: 15/04/2007, 23h51
  5. un petit coup de pouce svp ;)
    Par softstar dans le forum C++
    Réponses: 14
    Dernier message: 11/05/2006, 09h20

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