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 :

[Tkinter]Afficher un grille de valeurs


Sujet :

Tkinter Python

  1. #1
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut [Tkinter]Afficher un grille de valeurs
    Bonjour !
    Je cherche à faire une interfaçe graphique simple à un programme simple, qui permet d'exploiter une liste de N*N valeurs (en gros), et j'aimerais afficher cette liste (une matrice en quelque sorte) sous la forme d'une grille.
    N est variable, et je souhaite que les cases soient toutes de la même taille (et carrées si possible).
    J'ai pensé à faire une ligne tous les n points en vertical et horizontal, mais il me faudrait faire cela de manière efficace car il me faudra remplir les cases ainsi créées par une couleur uniforme qui variera en fonction de la valeur de la case correspondante dans la liste...
    Je ne sais pas si je me suis bien expliqué...
    Merci d'avance pour votre aide !

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Sous Tkinter, l'objet "grille" n'existe pas à ma connaissance
    S'il s'agit d'une grille où tu ne peux rien écrire dedans, tu peux utiliser un canvas et dessiner tes carrés avec la méthode create_rectangle

    un truc dans ce style ?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import Tkinter as Tk
     
    N = 5
    root = Tk.Tk()
    c = Tk.Canvas(root)
    for i in range(N):
        for j in range(N):
            c.create_rectangle(50*i, 50*j, 50*(i+1), 50*(j+1), fill='#'+str(i)+str(j+3)+'18'+str(j+4)+str(j))
    c.pack()
    root.mainloop()

  3. #3
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Effectivement, ça se rapproche de cela, mais les N doivent pouvoir être assez grand (une largeur d'image maxi de 600px, donc on peut imaginer des rectangles de 1*1...).
    Apparement, c'est du côté du canvas qu'il faut que je cherche, mais la piste que tu m'as donné est bonne !
    Merci .
    Si tu veux apporter une modif, je suis preneur

    Edit:
    J'ai fait un truc sympa, enfin, qui me plait !
    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 Tk
     
    N = 50
    pas=600/N
    root = Tk.Tk()
    c = Tk.Canvas(root,height=600,width=600)
    for i in range(N):
        for j in range(N):
            c.create_rectangle(pas*i, pas*j, pas*(i+1), pas*(j+1), fill='#FFFFFF')
    c.pack()
    root.mainloop()
    Ais-je accès aux rectangles après la création ?
    Pour les remplir ultérieurement ?

  4. #4
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    create_rectangle te renvoit un identifiant (un entier) qui te permet ensuite de retraiter ton objet (rectangle) comme tu le souhaite. Mais pour cela, il faut conserver quelque part cet identifiant (donc dans une matrice). Ensuite avec la fonction canvac.itemconfig(item, **options) tu peux modifier les propriétés de ton rectangle.

    exemple:

    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
    import Tkinter as Tk 
     
    N = 50 
    pas=600/N 
    root = Tk.Tk() 
    c = Tk.Canvas(root,height=600,width=600)
    listidrec=N*[[]]
    for i in range(N):
        listidrec[i]=N*[-1]
    for i in range(N): 
        for j in range(N): 
            listidrec[i][j] = c.create_rectangle(pas*i, pas*j, pas*(i+1), pas*(j+1), fill='#FFFFFF')
    c.itemconfig(listidrec[20][20],fill='#FF0000')        
    c.pack() 
    root.mainloop()

  5. #5
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Il s'avère que j'utilise une autre, technique, je passe par un tag, qui est différent pour chaque rectangle.
    J'ai encore d'autres problèmes à résoudre, mais qui relèvent plus du choix du type de données.

    Merci encore, tu m'as bien aidé

  6. #6
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    J'ai une question, tout de même, car effectivement, je peux modifier mon rectangle, mais je ne vois pas la modif, plus exactement, je vois seulement la dernière modif.
    Si je souhaite faire l'affichage de base, puis voir ensuite une série de modification (par exemple, faire passer un rectangle de la couleur FFFF00 à FFFFFF par pas de 1), comment faire ?

  7. #7
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    si tu veux voir la modification après avoir fait un traitement, il faut forcer le réaffichage avec
    (sinon, le réaffichage ne se fait que lorsque ta fonction a terminé l'ensemble de son traitement

    voilà un petit exemple rapide qui fait modifie un des rectangles du blanc au bleu
    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
    import Tkinter as Tk 
     
    import time
    N = 10 
    pas=600/N 
    root = Tk.Tk() 
    c = Tk.Canvas(root,height=600,width=600) 
    listidrec=N*[[]] 
    for i in range(N): 
        listidrec[i]=N*[-1] 
    for i in range(N): 
        for j in range(N): 
            listidrec[i][j] = c.create_rectangle(pas*i, pas*j, pas*(i+1), pas*(j+1), fill='#FFFFFF') 
     
    c.pack()
    def test():
        for i in range(17,256):
            c.itemconfig(listidrec[5][5],fill='#0000'+hex(i)[2:])
            print hex(i)[2:]
            time.sleep(0.05)        
            root.update()
     
     
    b = Tk.Button(text = 'test', command= test)
    b.pack()
    root.mainloop()
    le time.sleep n'est pas obligatoire (le dégradé reste visible sans ici)

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

Discussions similaires

  1. [CR] Ne pas afficher un champ de valeur nulle
    Par mavericks dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 28/03/2007, 16h06
  2. [Tkinter] Afficher un point
    Par Marc-Martin dans le forum Tkinter
    Réponses: 3
    Dernier message: 11/01/2006, 16h01
  3. Réponses: 2
    Dernier message: 05/01/2006, 00h08
  4. [Tkinter] Afficher une image animée
    Par Chris33 dans le forum Tkinter
    Réponses: 3
    Dernier message: 16/12/2005, 23h14
  5. [Tkinter] Afficher une image autre que gif
    Par mcdonald dans le forum Tkinter
    Réponses: 1
    Dernier message: 26/11/2005, 19h41

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