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 :

Python tkinter besoin d'aide


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2016
    Messages : 2
    Par défaut Python tkinter besoin d'aide
    Bonjour, dans le cadre d'un projet j'aimerai faire un tableau grâce a l'outils tkinter.
    je voudrais définir une fonction qui a pour entrée :
    - une liste de plusieurs chaîne de caractères
    - une liste de liste
    et qui me retourne un tableau fait grâce a tkinter

    exemple je rentre dans la fonction :
    ['OTANT','RHIEN','GENEI','ETIOA','EETES']
    [[1,1],[3,2],[2,3]]
    et il me ressort
    Nom : 12642632_10207428399062118_1163690318713071255_n.jpg
Affichages : 210
Taille : 15,8 Ko
    le tableau est fait a partir de la liste des chaines de caractères et les cases de couleur de la liste de liste



    voici ce que j'ai déjà fait (ce n'est pas encore sous forme de fonction)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import tkinter as bg
    liste=['OTANT','RHIEN','GENEI','ETIOA','EETES']
    mot=[[1,1],[3,2],[2,3]]
    fen1=bg.Tk()
    fen1.title('Positionnement:Grid')
    for lig in range(len(liste)):
        for col in range(len(liste[0])):
            for j in range(len(mot)):
                if mot[j]!=[lig,col]:
                    bg.Label(fen1,text=str(liste[lig][col]),borderwidth=15).grid(row=lig,column=col)
                else:
                    bg.Label(fen1,text=str(liste[lig][col]),borderwidth=15,bg='green').grid(row=lig,column=col)
    fen1.mainloop()
    après avoir lancé ça me retourne :
    Nom : 12631360_10207428475904039_8848804170157926871_n.jpg
Affichages : 204
Taille : 7,3 Ko
    mais je ne comprend pas pourquoi mais il me retourne un tableau avec une seul cases coloré (la dernière case de la liste de liste)

    si vous trouvez ma faute ou si vous connaissez une autre méthode ou n'importe quelle chose qui pourrai marcher, je suis preneur !
    merci d'avance

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ta comparaison est étrange, je verrai plutôt ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for lig in range(len(liste)):
        for col in range(len(liste[0])):
            if [lig, col] not in mot:
                bg.Label(fen1,text=str(liste[lig][col]),borderwidth=15).grid(row=lig,column=col)
            else:
                bg.Label(fen1,text=str(liste[lig][col]),borderwidth=15,bg='green').grid(row=lig,column=col)
    pas testé.

  3. #3
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par thibéo Voir le message
    Bonjour, dans le cadre d'un projet j'aimerai faire un tableau grâce a l'outils tkinter.
    je voudrais définir une fonction qui a pour entrée :
    - une liste de plusieurs chaîne de caractères
    - une liste de liste
    et qui me retourne un tableau fait grâce a tkinter

    exemple je rentre dans la fonction :
    ['OTANT','RHIEN','GENEI','ETIOA','EETES']
    [[1,1],[3,2],[2,3]]
    et il me ressort

    le tableau est fait a partir de la liste des chaines de caractères et les cases de couleur de la liste de liste



    voici ce que j'ai déjà fait (ce n'est pas encore sous forme de fonction)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import tkinter as bg
    liste=['OTANT','RHIEN','GENEI','ETIOA','EETES']
    mot=[[1,1],[3,2],[2,3]]
    fen1=bg.Tk()
    fen1.title('Positionnement:Grid')
    for lig in range(len(liste)):
        for col in range(len(liste[0])):
            for j in range(len(mot)):
                if mot[j]!=[lig,col]:
                    bg.Label(fen1,text=str(liste[lig][col]),borderwidth=15).grid(row=lig,column=col)
                else:
                    bg.Label(fen1,text=str(liste[lig][col]),borderwidth=15,bg='green').grid(row=lig,column=col)
    fen1.mainloop()
    après avoir lancé ça me retourne :

    mais je ne comprend pas pourquoi mais il me retourne un tableau avec une seul cases coloré (la dernière case de la liste de liste)

    si vous trouvez ma faute ou si vous connaissez une autre méthode ou n'importe quelle chose qui pourrai marcher, je suis preneur !
    merci d'avance
    Bonjour,
    Le problème est que le script réécrit "range(len(mot))" fois le texte.
    Il faut sortir de la boucle "j" lorsqu'une coïncidence est rencontrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import tkinter as bg
    liste=['OTANT','RHIEN','GENEI','ETIOA','EETES']
    mot=[[1,1],[3,2],[2,3]]
    fen1=bg.Tk()
    fen1.title('Positionnement:Grid')
    for lig in range(len(liste)):
        for col in range(len(liste[0])):
            for j in range(len(mot)):
                if mot[j]!=[lig,col]:
                    bg.Label(fen1,text=str(liste[lig][col]),borderwidth=15).grid(row=lig,column=col)
                else:
                    bg.Label(fen1,text=str(liste[lig][col]),borderwidth=15,bg='green').grid(row=lig,column=col)
                    break #ICI
    fen1.mainloop()
    Clodion

    PS: ainsi que le dit VinsS, la condition est étrange. Je préférerai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import tkinter as bg
    liste=['OTANT','RHIEN','GENEI','ETIOA','EETES']
    mot=[[1,1],[3,2],[2,3]]
    fen1=bg.Tk()
    fen1.title('Positionnement:Grid')
    for lig in range(len(liste)):
        for col in range(len(liste[0])):
            case = bg.Label(fen1,text=str(liste[lig][col]),borderwidth=15)
            case.grid(row=lig,column=col)
            if [lig, col] in mot:
                case.config(bg = "green")
    fen1.mainloop()

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

    Construire la grille et en colorier des cases peuvent se faire dans deux boucles séparées.
    Ce qui simplifie pas mal de choses.

    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
    import tkinter as tk
     
    liste=['OTANT','RHIEN','GENEI','ETIOA','EETES']
    mot=[[1,1],[3,2],[2,3]]
     
    root=tk.Tk()
    root.title('Positionnement:Grid')
     
    for i, m in enumerate(liste):
        for j, c in enumerate(m):
            tk.Label(root, text=c, borderwidth=15).grid(row=i,column=j)
     
    for i, j in mot:
        root.grid_slaves(row=i, column=j)[0].configure(bg='green')
     
    tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre très actif Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Par défaut remarque
    Le code va aussi beaucoup plus vite,Il fait 72 tests en moins((nombre de cases*cases a colorier)-cases a colorier).
    Optimiser un code est utile,surtout en python qui n'est pas hyper rapide.

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

Discussions similaires

  1. [Python 3.X] Convertisseur de monnaie Tkinter - besoin d'aide
    Par Louis69100 dans le forum Général Python
    Réponses: 5
    Dernier message: 25/04/2015, 04h06
  2. Python besoin d aide sur un THREAD Psycho cognitive
    Par dalverose dans le forum Général Python
    Réponses: 1
    Dernier message: 23/01/2012, 22h14
  3. Besoin d'aide TP de première année INFO => Python
    Par bond70 dans le forum Général Python
    Réponses: 3
    Dernier message: 05/11/2008, 00h00

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