Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin de conseil Tkinter

    22 mai 2018 à 11:43:57

    Bonjour, j'ai réaliser un programme simulant les mouvements de foule et je souhaite maintenant une visualisation graphique des résultats. J'ai tenté de réaliser avec Tkinter un quadrillage dans lequel est placé des obstacles et où les individus (représentés par des ronds rouges) se déplacent. J'ai déja les coordonnées des déplacements de chacun des individus que je stocke dans une liste L (voir code ci-joint). La liste L content les liste des déplacements de chacun des individus. Voici le code, il ne fonctionne pas (je suis novice ), peut-etre pourriez vous m'aider. Le programme bug dès la deuxième itération ( clic sur 'suivant'). L'idée pour obtenir une animation c'était de stocker les images dans une liste T que je supprime à chaque itération pour en créer des nouvelles. S est la potion de sortie. Obs la postion des obstacles.

    from tkinter import * from random import randrange

    def damier(obstacle,S):

    for j in range(10):
        for i in range(10):
                can.create_rectangle(50*i,50*j+50,50+50*i,50*j,fill='ivory')
    for el in obstacle:
        can.create_rectangle(50*el[1],50*el[0]+50,50+50*el[1],50*el[0],fill='black')
    can.create_rectangle(50*S[1],50*S[0]+50,50+50*S[1],50*S[0],fill='yellow')
    

    def avance():

    global t
    t = t + 1
    
    for a in range(len(L)):
        can.delete(T[0])
        T.pop(0)
        T.append(can.create_oval(50*L[a][t][1]+50*i,50*L[a][t][0]+50,50+50*L[a][t][1],50*L[a][t][0],fill = 'red'))
    

    L=[[[6, 1], [7, 2], [8, 3], [8, 4], [8, 5], [8, 6], [7, 7], [6, 8], [5, 9]], [[2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [3, 7], [4, 8], [4, 9], [5, 9]], [[5, 1], [4, 2], [3, 3], [3, 4], [3, 5], [2, 5], [2, 6], [3, 7], [4, 8], [4, 9], [5, 9]], [[3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [2, 5], [1, 4], [2, 5], [2, 6], [3, 7], [4, 8], [5, 9]], [[4, 1], [3, 2], [3, 3], [3, 4], [3, 5], [2, 5], [1, 4], [1, 5], [1, 6], [2, 7], [3, 8], [4, 9], [5, 9]]]
    S=[5,9] Obs=[[3,6],[4,6],[5,6],[6,6],[7,6]]
    T=[] t=0 fen = Tk() can = Canvas(fen,width=500,height=500,bg='ivory') can.pack(side=TOP) damier(Obs,S) for a in range(len(L)):

     T.append( can.create_oval(50*L[a][t][1],50*L[a][t][0]+50,50+50*L[a][t][1],50*L[a][t][0],fill = 'red'))
    

    b1= Button(fen, text='démarrer',command=avance) b1.pack() fen.mainloop()

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      22 mai 2018 à 12:36:24

      Bonjour,

      Voici quelques conseils généraux pour Tkinter -> ICI

      Autres conseils,

      • Éviter les nombres magiques
      • Utiliser les méthodes adaptées aux widgets du module Tkinter (revoir sur le widget Canvas, quelle méthode permet de récupérer l'ensemble des items)
      • Partager sur Facebook
      • Partager sur Twitter

      Besoin de conseil Tkinter

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown