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 :

Parcourir une Grid


Sujet :

Tkinter Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Parcourir une Grid
    Bonjour,

    j'ai une grid composée de rectangles noirs et de rectangles blancs.
    Je voudrais parcourir la grid pour compter le nombre de rectangles noirs présents sur chaque ligne et sur chaque colonne.
    Les cases n'ont pas d'identifiants et ne sont pas associées à une liste.
    Pourriez-vous me dire comment procéder, svp?
    Merci d'avance pour vos réponses,
    Arsène

  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 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par Arsene12 Voir le message
    j'ai une grid composée de rectangles noirs et de rectangles blancs.
    Je voudrais parcourir la grid pour compter le nombre de rectangles noirs présents sur chaque ligne et sur chaque colonne.
    grid et rectangles ne sont pas des objets Python basiques... Donc "parcourir" et récupérer la couleur d'un "rectangle" sans poster un peu de code permettant de savoir avec quoi cela est construit...

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

  3. #3
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    http://tkinter.fdex.eu/doc/gp.html#w.grid_slaves

    Si ça ne réponds pas au besoin il faudra lâcher un peu de code & contexte

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    En fait, les rectangles possèdent bien des identifiants que je récupère ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        r = canvas.find_all()
        print(r)
    Il me faut d'abord sélectionner dans cette liste tous les identifiants qui correspondent à des rectangles.
    Ensuite il me faut vérifier que le nombre total d'identifiants soit bien égal à X*X, X correspondant au nombre de lignes et de colonnes de la grid. C'est une grid carré!
    Ensuite il me faut faire de l'arithmétique pour vérifier les couleurs consécutives des rectangles.

  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 778
    Points
    36 778
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Ensuite il me faut faire de l'arithmétique pour vérifier les couleurs consécutives des rectangles.
    Il serait peut être plus pertinent de commencer par l'arithmétique pour voir comment elle pourrait aider à simplifier le problème.
    Si votre carré est rempli de M * N rectangles de dimension a * b, alors vous savez calculer la surface occupée par la i-ème colonne et la j-ième ligne.... et donc trouver les objets qui sont dedans (sans avoir à trier sur l'ensemble de tous les objets).

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

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    J'ai fait une modification. Au lieu de rectangle, les cases de la grid sont maintenant remplies d'un texte "VRAI" ou d'un texte "FAUX".
    Je suis en train de faire un code pour parcourir les lignes et compter les FAUX. À l'arrivée, ça donnera quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            # Calcul des FAUX par lignes
            ih = 0
            nbrCF = 0
            for ligne in items2 :
                il=0        
                if int(nbrCF) == (int(il)-1) and nbrCF>0:
                   print("STOOOOOP!")  
                for oid in ligne :
                    il += 1
                    myText = can.itemcget(oid,'text')
                    if myText == "FAUX":
                       nbrCF += 1
                ih += 1
    Pour les colonnes, il va me falloir peut-être inverser la matrice.

  7. #7
    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 778
    Points
    36 778
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    J'ai fait une modification. Au lieu de rectangle, les cases de la grid sont maintenant remplies d'un texte "VRAI" ou d'un texte "FAUX".
    Ah ben voyons, si vous changez de problème avant même d'avoir essayé de l'exposer, pas la peine d'ouvrir une discussion.

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

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Je vous prie de m'excuser car dans mon code j'ai à la fois des rectangles de couleur et des champs de texte. De toute façon j'ai trouvé la solution pour les 2 en ce qui concerne les lignes :

    Pour les text = "FAUX"

    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
            # Calcul des FAUX par lignes
            ih = 0
            nbrCF = 0
            il = 0
            for ligne in items2 :                       
                il=0
                nbrCF = 0
                for oid in ligne :
                    il += 1
                    myText = can.itemcget(oid,'text')
                    if myText == "FAUX":
                       nbrCF += 1
                if int(nbrCF) == (int(il)-1) and nbrCF>0:
                   print("STOOOOOP!")       
                ih += 1
    Pour les rectangles colorés :

    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
            # Calcul des cases JAUNES par lignes
            ih = 0
            nbrCF = 0
            il = 0
            for ligne in items :                       
                il=0
                nbrCF = 0
                for oid in ligne :
                    il += 1
                    myColor = can.itemcget(oid,'fill')
                    if myColor == "white":
                       nbrCF += 1
                if int(nbrCF) == (int(il)-1) and nbrCF>0:
                   print("STOOOOOP!")       
                ih += 1
    L'important, c'est de changer de liste : item[] ou item2[]

    Maintenant, pour comptabiliser sur les colonnes, c'est là qu'il convient d'inverser les x et les y dans la grid. Faut que je trouve moyen de faire ça. Je m'étais dit qu'il suffisait peut-être d'inverser la liste item[] puisque la racine carré de sa longueur est égal au nombre de lignes ou de colonne de la matrice. J'ai refait le code avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ligne in reversed(items2) :
    Ça marche pas!

    J'ai crée une nouvelle liste qui n'est pas reliée au canvas. Quand je printe les 2 listes, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    items2 = [[1, 3, 17, 21], [23, 25, 39, 43], [111, 113, 127, 131], [155, 157, 171, 175]]
     
    items4 = [['VRAI', "FAUX", "FAUX", "FAUX"], ["VRAI", 'VRAI', 'VRAI', 'FAUX'], ["FAUX", 'FAUX', 'FAUX', 'FAUX'], ["VRAI", 'FAUX', 'VRAI', 'VRAI']]
    La première liste est constituée d'identifiants. Le code donnée précédemment fonctionne bien pour calculer si une ligne ne contient que des FAUX.

    Par contre je ne sais pas comment faire avec la seconde liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            ih = 0
            nbrCF = 0
            for ligne in items4 :                       
                il=0
                nbrCF = 0
                for oid in ligne :
                    il += 1
                    myText = can.itemcget(oid,'text')   #  <-- le problème vient d'ici car items4 n'est pas reliée au canvas.
                    if myText == "FAUX":
                       nbrCF += 1
                if int(nbrCF) == int(il) and nbrCF>0:
                   print("STOOOOOP!")       
                ih += 1

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    J'ai trouvé la solution. Y'a pas besoin de créer une autre liste :

    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
     def autoStop():
       myLenght = int(len(items2))
       for y in range(1,myLenght):
          nbrF = 0
          for x in range(1,myLenght):
             myT = can.itemcget(items2[x][y],'text')         
             if myT =="FAUX":
                nbrF += 1
             if nbrF == myLenght-1:
                print('STOP')
     
       for x in range(1,myLenght):
          nbrF = 0
          for y in range(1,myLenght):
             myT = can.itemcget(items2[x][y],'text')         
             if myT =="FAUX":
                nbrF += 1
             if nbrF == myLenght-1:
                print('STOP')

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

Discussions similaires

  1. parcourir une grid
    Par Arsene12 dans le forum Tkinter
    Réponses: 3
    Dernier message: 09/05/2018, 19h08
  2. mettre le bouton "parcourir " dans une grid
    Par mvc_dev dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/04/2011, 13h41
  3. Parcourir une liste deroulante
    Par brandon dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/02/2005, 19h03
  4. Réponses: 5
    Dernier message: 21/07/2004, 19h34
  5. [VB6] parcourir une arborescence de repertoire
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/04/2003, 17h33

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