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

Programmation multimédia/Jeux Python Discussion :

Demineur avec tkinter : problème d'affichage


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 3
    Par défaut Demineur avec tkinter : problème d'affichage
    Bonsoir,

    J'ai crée un démineur fonctionnel, avec l'interface graphique tkinter, mais je me suis rendu compte qu'il y avait un problème majeur : il est très lent à cause de l'affichage de la grille tkinter.

    Je m'explique : j'ai une procédure "rafraichir" qui me crée une grille de boutons. je l'utilise au départ pour générer la grille, puis à chaque fois que je la rafraichi, ce qui prend forcement du temps.
    J'aimerais, si possible, pouvoir changer juste les valeurs contenues dans les boutons (dans une nouvelle fonction, qui ne fera vraiment que rafraichir).


    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
    def rafraichir(Grille,Grille2,larg,long,bombmax,t1):
     
        #Configurations des lignes et des colonnes
        Grid.rowconfigure(fenetre, 0, weight=1) 
        Grid.columnconfigure(fenetre, 0, weight=1) 
     
        #On créer et on configure le "frame"
        frame=Frame(fenetre)
        frame.grid(row=0, column=0, sticky=N+S+E+W)
     
     
        # On genère la grille de boutons
        for i in range(long): #On parcour la longueur
            Grid.rowconfigure(frame, i, weight=1) 
            for j in range(larg):  #On parcour la largeur
             Grid.columnconfigure(frame, j, weight=1)
     
             #On crée un bouton, avec la valeur correspondant à la grille 2, une couleur de fond, un relief quand on passe la souris dessus
             #Une commande : celle ci utilise une "mini fonction" lambda qui permet d'associer à chaque bouton ses coordonnées, ou fait ensuite à la fonction cliqueG avec ces coordonnées
             btn = Button(frame,text=Grille2[i][j], background="white", overrelief="sunken",command=lambda x=i, y=j: cliqueG(x,y,Grille,Grille2,long,larg,bombmax,t1))
     
             #On ajoute une autre commande au bouton, lorqu'on utilise le clic droit    
             btn.bind("<Button-3>", lambda event,x=i,y=j: cliqueD(x,y,Grille,Grille2,long,larg,bombmax,t1))
             btn.grid(row=i, column=j, sticky=N+S+E+W)
    PS : la grille2 correspond à la grille de jeu, c'est dans celle ci que les valeurs se mettent à jouer après avoir creusé.

    Merci d'avance pour vos réponses

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Citation Envoyé par arcanis112 Voir le message
    J'aimerais, si possible, pouvoir changer juste les valeurs contenues dans les boutons (dans une nouvelle fonction, qui ne fera vraiment que rafraichir).
    Pour modifier le texte d'un Button existant, il faut appliquer .configure(text="nouveau texte") à chaque Button. Ce qui suppose avoir rangé vos Button dans une liste de listes (par exemple) pour la parcourir avec votre double boucle qui balaie Grille.
    Mais s'il y a beaucoup de Button à mettre à jour çà risque de ne pas être bien plus rapide: ceci dit, vous verrez bien après avoir essayé.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 3
    Par défaut
    Merci pour votre réponse.

    Le problème, quand je veux mettre à jour ma grille dans une autre fonction en utilisant btn.configure, c'est qu'une erreur s'affiche : btn n'est pas défini.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Citation Envoyé par arcanis112 Voir le message
    Le problème, quand je veux mettre à jour ma grille dans une autre fonction en utilisant btn.configure, c'est qu'une erreur s'affiche : btn n'est pas défini.
    Et d'où il sort ce btn? Les ranger dans une liste de listes de sorte que (i, j) vous permette d'accéder au Button correspondant au (i, j) de la grille n'est pas une option.

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 3
    Par défaut
    Merci,
    Je vais y reflechir, j'ai un peu de mal car je suis débutant.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Par défaut
    il me semble que "btn" est créé dans la fonction, donc en local, et du coup invisible dans une autre fonction s'il n'est pas précisé en global...

    (je débute en python, et mes essais m'ont montré l'importance de bien comprendre ces notions de local et global)

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Citation Envoyé par arcanis112 Voir le message
    Je vais y reflechir, j'ai un peu de mal car je suis débutant.
    Faites chauffer les neurones: une liste de listes, c'est tout comme Grille2.
    Vous la remplissez/créez lors de la création des Button, et la balayez lors des modifications.

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

Discussions similaires

  1. Mail HTML avec java, problème d'affichage dans boite mail
    Par Marc_3 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 23/02/2017, 18h36
  2. [Python 3.X] Problème d'affichage de label avec tkinter
    Par flobos dans le forum Général Python
    Réponses: 3
    Dernier message: 10/03/2016, 09h45
  3. problème d'affichage dune image avec Tkinter
    Par destroy51 dans le forum GUI
    Réponses: 14
    Dernier message: 29/03/2014, 13h40
  4. Avec GMail, problème d'affichage d'images aléatoire
    Par agony dans le forum E-Mailing
    Réponses: 4
    Dernier message: 09/11/2012, 14h48
  5. Graphique avec matplotlib, probléme d'affichage des boutons
    Par astragoth dans le forum Général Python
    Réponses: 0
    Dernier message: 08/04/2010, 08h27

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