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 :

Un ralentissement inexpliqué


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Octobre 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Un ralentissement inexpliqué
    Bonjour.

    J'ai écrit le programme ci-joint ("Le jeu de la vie"), mais je constate un ralentissement de l'affichage des cases rouges quand on clique sur "Jouer" et que le "jeu" ne se termine pas vite.
    Pour le tester, je vous encourage à laisser les valeurs par défaut dans la première fenêtre, puis à cliquer sur "grille aléatoire" dans la seconde, et à ajouter des cases rouges collées aux autres (en cliquant sur les cases blanches à côté des rouges), puis de cliquer sur "Jouer".

    Je pensais que cela venait de la méthode "after" utilisée pour ralentir l'affichage entre deux états, mais sur un problème plus simple (affichage d'un compte à rebours), il n'y a aucun ralentissement.
    Sauriez-vous par hasard ce qui provoque ce ralentissement ?
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Bonjour,

    Déjà tu as plusieurs instances Tk, tu dois en avoir qu'une seule ! Dans le cas où tu souhaites avoir plusieurs fenêtres, tu peux utiliser Toplevel.

    Le calcul de nombre_voisins est à évaluer au niveau du temps, pour cela tu peux utiliser timeit. Pour moi il y a de grandes chances que les incrémentations pures python, vont beaucoup pénaliser niveau temps, y compris les multiples conditions bien trop élevées.

    Niveau code, on utilise trop le mot clé global, pour l'utiliser comme une rustine une fois, c'est tolérable, mais dans ton cas son utilisation est bien trop importante et reste une mauvaise pratique. Je te laisse chercher sur le net les multiples articles sur le sujet.

    Je conseille aussi de mettre des docstrings pour aider à comprendre certaines fonctions et leurs intérêts dans la résolution de ton problème.

    Voilà déjà quelques pistes pour répondre à ta question et aider certains membres à ajouter des commentaires supplémentaires.

    Bonne continuation...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  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,

    Votre code ralentit parce qu'à chaque itération, vous ajoutez des tas d'items dans le Canvas sans avoir détruit les précédents. A la longue, çà rame.
    Plutôt que de tout redessiner vous pourriez juste supprimer les cases.
    En attendant .delete('all') sur le Canvas, avant de tout redessiner devrait résoudre le soucis de ralentissement.

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

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Octobre 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci à vous deux.

    Je n'aime pas non plus les variables globales. En général, je passe en arguments les variables, mais là, je me suis retrouvé coincé à un moment donné, d'où tout ce bazar au niveau des variables.
    Le code est en effet loin d'être optimal, surtout au niveau de l'ajout des cases, j'y jetterai un coup d’œil plus tard.

    J'ai ajouté un GrilleCanvas.delete('all') dans la fonction draw_grille_vierge, qui est appelée assez souvent en effet... mais cela n'a pas d'influence sur le problème.
    Mais avec ce qui a été dit, j'ai au moins quelques pistes pour améliorer le code.

    Je fais ça pour me perfectionner avec Tkinter (et python aussi), donc il est intéressant de réfléchir sur ce genre de problème, quitte à y passer du temps (de toutes façons, je fais ça quand j'ai rien à faire).

    Merci à vous. Je reviendrai quand j'aurai modifié le code.

Discussions similaires

  1. [Systeme] Ralentissement important WinXP
    Par titus55 dans le forum Windows XP
    Réponses: 6
    Dernier message: 07/11/2005, 17h54
  2. Réponses: 6
    Dernier message: 24/10/2005, 08h43
  3. PLantage inexpliqué ...
    Par Clad3 dans le forum C++
    Réponses: 4
    Dernier message: 29/09/2005, 13h13
  4. [reseau] Déconnexions inexpliquées
    Par chaval dans le forum Administration
    Réponses: 4
    Dernier message: 24/08/2005, 11h10
  5. Ralentissement lors d'INSERT successifs dans IB 6
    Par Papino dans le forum Débuter
    Réponses: 9
    Dernier message: 21/01/2005, 13h29

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