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 :

création d'un groupe d'objets dans tkinter


Sujet :

Python

  1. #1
    P.G
    P.G est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Par défaut création d'un groupe d'objets dans tkinter
    Bonjour à tous,

    Je souhaite à partir de valeurs rangées dans une liste créer avec une boucle qui parcours cette liste une série d'objet dans un canvas.

    Ici des cercles avec can.create_oval(.....) figurant des balles.

    Mon problème est comment faire pour les noms des instances des cercles qu'il faut créer dynamiquement en fonction de l'indice i de la boucle.

    Pour ceux qui connaissent flash AS2 permet de créer des noms en agglomérant des chaines du genre nomDeBase+str(indiceBoucle)

    Y a t-il un moyen de procéder en python ( 3.0 ) pour obtenir le même résultat.

    Merci beaucoup du coup de main.

    P.G

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

    Vous pouvez associer à chaque item du canvas un ou plusieurs "tags" i.e. des chaînes de caractères que vous avez construit... Et regarder le tas de méthodes associées pour voir comment s'en servir.

    canvas.create_machin retourne l'identifiant de l'objet crée par le Canvas.
    Vous pouvez donc aussi créer une association entre vos identifiants et celui retourné par le Canvas (avec un dictionnaire).

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

  3. #3
    P.G
    P.G est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Par défaut
    Hello merci pour la piste

    voilà le résultat pour ceux qui seraient intéressés par le post, deux balles dans le canvas.

    Merci encore.

    P.G

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    from tkinter import *
    from math import *
     
    # définition des gestionnaires
    # d'événements :
     
    def move():
        "déplacement de la balle avec rebonds"
        global listeDesBalles, largeurScene, hauteurScene 
     
     
    # Etape 1 : récupérer les caractéristiques de la scène et des balles pour les limites
        for i in range(len(listeDesBalles)):
            rayonBalle = listeDesBalles[i][4]
            limiteXDroit = largeurScene - rayonBalle
            limiteXGauche  = rayonBalle 
            limiteYHaut = rayonBalle
            limiteYBas  = hauteurScene - rayonBalle
     
     # étape 2 : récupération des coordonnées et vitesses courante de la balle dans la liste
            xc = listeDesBalles[i][0]
            yc = listeDesBalles[i][1]
            vx = listeDesBalles[i][2]
            vy = listeDesBalles[i][3]
            couleur = listeDesBalles[i][6]
     
    # étape 3 : déplacement et gestion des limites, changement de couleur à chaque rebond       
            xc, yc = xc + vx, yc + vy
            if xc > limiteXDroit:
                xc, vx, vy = limiteXDroit, -vx, vy
                couleur = 'blue'
            if yc > limiteYBas:
                yc, vx, vy = limiteYBas, vx, -vy
                couleur = 'yellow'
            if xc < limiteXGauche:
                xc, vx, vy = limiteXGauche, -vx, vy
                couleur = 'green'        
            if yc < limiteYHaut:
                yc, vx, vy = limiteYHaut, vx, -vy
                couleur = 'pink'   
     
    # étape 4 : sauvegarde des nouvelles valeurs       
            listeDesBalles[i][0] = xc
            listeDesBalles[i][1] = yc
            listeDesBalles[i][2] = vx
            listeDesBalles[i][3] = vy
            listeDesBalles[i][6] = couleur
     
    # étape 5 : redessin dans le canvas        
            balle = can1.find_withtag(listeDesBalles[i][7])     
            can1.coords(balle,xc - rayonBalle, yc - rayonBalle , xc + rayonBalle, yc + rayonBalle)
            can1.itemconfigure(balle, fill = couleur)
     
     
        if flag > 0: 
            fen1.after(50,move)         # => boucler, après 50 millisecondes
     
     
    def creationDesBalles():
        "Création des balles à partir de la liste"
        for i in range(len(listeDesBalles)):
            rayonBalle = listeDesBalles[i][4]
            can1.create_oval(listeDesBalles[i][0] - rayonBalle, listeDesBalles[i][1] - rayonBalle , \
                        listeDesBalles[i][0] + rayonBalle, listeDesBalles[i][1] + rayonBalle, width=2, \
                        fill=listeDesBalles[i][6],tags=listeDesBalles[i][7])        
     
     
    def stop_it():
        "arrêt de l'animation"
        global flag    
        flag = 0
     
    def start_it():
        "démarrage de l'animation"
        global flag
        if flag == 0:            # pour ne lancer qu’une seule boucle
           flag = 1
           creationDesBalles()
           move()
     
     
     
     
    ## PROGRAMME PRINCIPAL
     
    # les variables suivantes seront utilisées de manière globale :
    listeDesBalles = []
    # Ajout de  balles :       0   1    2    3      4            5          6            7
    #                             xc, yc,  vx,  vy, rayon,  masse,  couleur,      nom
    listeDesBalles.append([20, 20,  10,  10,     20,         0,     'red',   'Balle_1'])
    listeDesBalles.append([60, 80, -15,  10,     30,        0,   'green',   'Balle_2'])
     
    largeurScene = 400
    hauteurScene = 500
     
     
    score = 0
    shoot = 15
     
    flag = 0                   
     
     
    # Création de l'interface graphique
    # Création du widget principal ("parent") :
    fen1 = Tk()
    fen1.title("Animation multiballes Exo 8.30")
     
    # création des widgets "enfants" :
     
    bou1 = Button(fen1,text='Quitter', width = 8, command=fen1.destroy)
    bou1.pack(side=BOTTOM,   fill = X, expand = 1)
     
    bou2 = Button(fen1, text='Démarrer', width = 8, command=start_it)
    bou2.pack(side=BOTTOM,  fill = X, expand = 1)
     
    bou3 = Button(fen1, text='Arrêter', width = 8, command=stop_it)
    bou3.pack(side=BOTTOM,   fill = X, expand = 1)
     
    can1 = Canvas(fen1,bg='dark grey',height=hauteurScene, width=largeurScene)
    can1.pack(side=LEFT, padx =5, pady =5)
     
    # démarrage du réceptionnaire d'événements (boucle principale) :
    fen1.mainloop()

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 705
    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 705
    Par défaut
    Salut,
    L'intérêt d'avoir mis un tag "unique" est de ne pas avoir à récupérer l'identifiant de l'item du Canvas.
    Dans votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            balle = can1.find_withtag(listeDesBalles[i][7])     
            can1.coords(balle,xc - rayonBalle, yc - rayonBalle , xc + rayonBalle, yc + rayonBalle)
            can1.itemconfigure(balle, fill = couleur)
    .find_withtag va retourner la liste de tous les items associés à listeDesBalles[i][7] sous la forme d'un tuple.
    Ce qui fait qu'arrêter/démarrer deux fois devrait planter.
    Il suffit d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            balle = listeDesBalles[i][7] 
            can1.coords(balle,xc - rayonBalle, yc - rayonBalle , xc + rayonBalle, yc + rayonBalle)
            can1.itemconfigure(balle, fill = couleur)
    arrêter/démarrer deux fois ne plante plus mais vous allez créer deux nouvelles balles.

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

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

Discussions similaires

  1. Suppression d'un groupe d'objet dans Excel
    Par f.leduc dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 24/12/2008, 05h12
  2. [BO 5.1.6 i] Création d'objet dans l'univers
    Par julien2602 dans le forum Designer
    Réponses: 20
    Dernier message: 08/01/2008, 14h15
  3. Problème création d'un objet dans une Form
    Par helico2 dans le forum C++/CLI
    Réponses: 7
    Dernier message: 02/01/2008, 16h32
  4. [1.x] Création de plusieurs objets dans mon action.class.php
    Par lijko dans le forum Symfony
    Réponses: 2
    Dernier message: 30/12/2007, 13h37
  5. création d'un objet dans un Tobjectlist
    Par niarkyzator dans le forum Delphi
    Réponses: 2
    Dernier message: 07/01/2007, 20h47

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