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 :

Probleme sur mon programme


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut Probleme sur mon programme
    Bonjour a tous,

    Je suis un débutant dans le monde de la programmation et je dois rendre un programme que j'ai crée de A à Z.
    Il s’agit d'une version très simplifiée du jeu tracks and field et j'ai trois problèmes:
    -Premièrement, je ne comprends pas pourquoi mon j1 et mon pnj3 clignotent lorsqu'ils bougent;
    -Ensuit, je ne comprends pas non plus pourquoi lorsque je demande à mon personnage bleu de bouger ses jambes tous les personnages bougent la leur
    -Enfin pourquoi la jambe bouge de manière désordonnée depuis qua j'ai ajouté les 3 pnjs alors qu’avant elle suivait un mouvement "normal" c'est a dire qu'elle faisait des allers retours et non ce grand écart

    Merci d'avance
    Antoine
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  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,

    Votre soucis est que vous empilez des figures avec des délais (time.sleep) entre chaque mise à jour (via .update).
    Votre programme fait en gros ceci:
    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
    import time
    canvas = tk.Canvas()
    canvas.pack()
    while True:
        canvas.create_rectangle(0, 0, 600, 600, fill='grey')
        canvas.update()
        time.sleep(0.1)
     
        canvas.create_rectangle(100, 100, 200, 200, fill='blue')
        canvas.update()
        time.sleep(0.1)
    Imaginez qu'on exécute ces instructions une deuxième fois. Le rectangle gris va s'afficher au dessus des différents rectangles créés à l'étape 1. Ca attend un peu avant de créer le petit rectangle bleu.... Et vous voyez le rectangle bleu qui clignote.

    Le premier soucis est donc la cascade de canvas.update()/time.sleep(0.1) qui donnent l'impression que... Il serait préférable qu'il n'y en ait qu'un à chaque itération:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import tkinter as tk
    import time
    canvas = tk.Canvas()
    canvas.pack()
    while True:
        canvas.create_rectangle(0, 0, 600, 600, fill='grey')
        canvas.create_rectangle(100, 100, 200, 200, fill='blue')
     
        canvas.update()
        time.sleep(0.1)
    i.e. on fait les changements, on les affiche (via .update) et on attend un peu avant le tour suivant.

    Le deuxième soucis est qu'à chaque itération vous créez de nouveaux objets sans détruire les anciens (il serait bien meilleur d'apprendre à les modifier!!!)... A ce rythme, au bout d'un certain temps vous aller excéder la capacité de la mémoire, le disque va se mettre à tourner et çà va ramer grave...

    Dernier soucis mais non le moindre c'est que si votre programme marchotte, c'est parce que vous utilisez sans les comprendre des fonctionnalités plutôt avancées de tkinter. Il faut apprendre les bases avant!!

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci wiztricks de votre réponse,

    Pour la première parti c'est bon ils ne clignotent plus,
    Pour la deuxième pouvez vous m'aider à modifier et à détruire les anciennes commande ou m'expliquer ce qu'il me manque pour que je le fasse moi même ?
    Pour la troisième partie je vous ai mit en pièce jointe le programme de commande du joueur bleu avant l'ajout des rouges et il marche comme je le voulais c'est piur cela que je ne comprends pas le problème qui est apparu entre le programme quand les cubes rouges ne s'affichaient pas et quand ils s'affichent.

    Ps: j'ai aussi remis le programme "complet" en pièce jointe avec les diverses modification qu j'ai effectué
    Fichiers attachés Fichiers attachés

  4. #4
    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 Antoine Dess Voir le message
    il marche comme je le voulais c'est pour cela que je ne comprends pas le problème qui est apparu entre le programme quand les cubes rouges ne s'affichaient pas et quand ils s'affichent.
    Ça marchait avant... et comme, vous avez oublié de recopier l'instruction magique sur laquelle repose votre château de cartes.... Patatras, tout est cassé.

    Le code ci dessous utilise des fonctionnalités à connaître pour réaliser vos animations (sans vous appuyer sur des "class").
    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
    import tkinter as tk
    import time
     
    def create_figure(canvas, x, y):
        size = 40
        ccr = canvas.create_rectangle
        ccr(x, y, x+size, y+size, fill='red', tag=('figure', 'body'))
        y0 = y + size + 5
        x0 = x
        ccr(x0, y0, x0+15, y0+10, fill='red', tag=('figure', 'legs1'))
        ccr(x0+5, y0, x0+20, y0+10, fill='red', tag=('figure', 'legs2'))
        x0 = x+25
        ccr(x0, y0, x0+15, y0+10, fill='red', tag=('figure', 'legs1'))
        ccr(x0-5, y0, x0+10, y0+10, fill='red', tag=('figure', 'legs2'))
     
    done = False
    def set_done():
        global done
        done = True
     
    root = tk.Tk()
    canvas = tk.Canvas(root)
    canvas.pack()
     
    for x, y in ((10, 10), (45, 80), (55, 0)):
        create_figure(canvas, x, y)
     
    tk.Button(root, text='quit', command=set_done).pack()
     
    count = 0
    legs_state = False
    while not done:
        if count % 2:
            i1, i2 = (1, 2) if legs_state else (2, 1)
            canvas.itemconfigure('legs%d' % i1, state='hidden')
            canvas.itemconfigure('legs%d' % i2, state='normal')
            legs_state = not legs_state
     
        canvas.move('figure', 2, 2)
        count = (count + 1) % 4
        root.update()
        time.sleep(0.2)
    çà bouge les jambes une itération sur 2 parce (que je trouve) qu'elles s'affolent sinon.

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci de votre aide c'est bon j'ai réussi a régler mes 3 problèmes.
    Juste une dernière question savez-vous comment faire pour que lorsque l'événement tomber se réalise les jambes de mon personnage se déplacent?
    Je veux dire ou dois-je placer ma commande (dans le while ou dans la définition de l’événement) et quelle commande je dois placer (if, for....)

    Merci d'avance

  6. #6
    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 Antoine Dess Voir le message
    Je veux dire ou dois-je placer ma commande (dans le while ou dans la définition de l’événement) et quelle commande je dois placer (if, for....)
    Ce que j'en ai compris estque "tomber" est la fin de partie. Donc il faut que çà provoque la sortie du while... pour se mettre dans un état où çà attend "rejouer" ou "quitter".

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

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Non "tomber" fait comme son nom l'indiquer tomber le personnage c'est à dire que ses jambes se déplacent pendant peu de temps sur le côté droit du personnage qui s’arrête avant quelles reviennent à leur position normale et qu'il puisse continuer de courir.

  8. #8
    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,

    Dans le cas général, il faut distinguer le(s) personnage(s) qui tombe(nt) parmi les autres pour lui(leur) appliquer un déplacement adapté à leur état (ceux qui tombent, ceux qui..).
    Quelque part, çà passe par des listes de... personnages et traduire à quoi correspond un personnage dans le tas de lignes et de rectangles affichés.
    Si vous restez avec le parti "j'efface tout et je redessine tout" pas besoin de "classer", "catégoriser" les figures... mais il faut quand même lui associer un état et le dessiner en fonction de celui-ci.
    Le gros soucis (que j'ai) est que votre niveau est un peu trop faible pour utiliser les outils "standards" que sont les "class" ou les tags du Canvas... Et que faire cela sans est certainement possible mais c'est bien trop de boulot.
    Désolé,

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

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bonjour

    Merci, dommage je ferai sans .

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Une dernière question je ne sais pas si c'est possible a mon niveau mais est il possible que quand mon personnage bleu avance et déplace l'image cela ne déplace pas les personnages rouges

  11. #11
    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 Antoine Dess Voir le message
    est il possible que quand mon personnage bleu avance et déplace l'image cela ne déplace pas les personnages rouges
    C'est toujours une histoire de catégories: ici, il faut faire la différence entre les éléments qui avancent et ceux qui ne bougent pas.
    Dans votre cas, faire des catégories commence par regrouper des choses dans, par exemple, une liste pour... appliquer un traitement ad hoc à tous ses éléments - qui devient collection de... -.
    Et donc on se retrouve dans le même bazar, comment représenter le fond et les différents personnages.
    Si vous partez sur "on efface tout et on redessine tout", un personnage pourrait être une couleur et une position à partir de laquelle, on sait le redessiner après avoir modifié (ou pas) la position.
    Une représentation "basique" pourrait être une liste de listes: chaque liste représentant un personnage (couleur, position). A partir de là on essayer de traduire "bouger les bleus" en modifiant la position des "bleus" puis en redessinant tout ce qu'il y a dans la liste de listes (et traiter le fond "à par" - il n'y en a qu'un et il faut le placer en dessous, donc le (re-)créer en premier)
    Ca donnerait (par exemple) un code comme çà:
    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
    import tkinter as tk
    import time
     
    figures = []
    def create_personnage(canvas, x, y, color='red', legs=0):
        personnage = [ x, y, color, legs ]    
        size = 40
        ccr = canvas.create_rectangle
        ccr(x, y, x+size, y+size, fill=color)
        y0 = y + size + 5
        x0 = x
        if legs % 2:
            ccr(x0, y0, x0+15, y0+10, fill=color)
        else:
            ccr(x0+5, y0, x0+20, y0+10, fill=color)
        x0 = x+25
        if legs % 2:
            ccr(x0, y0, x0+15, y0+10, fill=color)
        else:
            ccr(x0-5, y0, x0+10, y0+10, fill=color)
        return personnage
     
    done = False
    def set_done():
        global done
        done = True
     
    def figures_move(canvas, colors):
        for ix, personnage in enumerate(figures):
            x, y, color, legs = personnage
            if color in colors:
                x += 2
                y += 2
                legs = (legs + 1) % 4
                p = create_personnage(canvas, x, y, color, legs)
                figures[ix] = p # on mémorise la nouvelle position, état.
            else: # on fait du surplace.
                create_personnage(canvas, x, y, color, legs)
     
    root = tk.Tk()
    canvas = tk.Canvas(root)
    canvas.pack()
     
    for x, y in ((10, 10), (45, 80)):
        figures.append(create_personnage(canvas, x, y))
    figures.append(create_personnage(canvas, 55, 0, color='blue'))
     
    colors = ['blue', 'red']
    def do_toggle():
        if 'blue' in colors:
            colors.remove('blue')
        else:
            colors.append('blue')
    tk.Button(root, text='toggle', command=do_toggle).pack()
    tk.Button(root, text='quit', command=set_done).pack()
     
    while not done:
        canvas.delete('all')
        figures_move(canvas, colors)
        root.update()
        time.sleep(0.2)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    J'ai un problème avec le programme que vous me passez car je travaille avec from tkinter import, et vous me passez des import tkinter as tk. Je me suis renseigné et cela est pareil à ceci près qu'il faut changer les noms des objets que nous créons or cela m’empêche de comprendre ce que je peux modifier car a cause de ses problèmes de noms je ne peux pas récupérer des bouts de votre programme pour voir ce que cela pourrai changer.

    Autre problème le personnage bleu fait avancer l'image avec lui pour qu'il soit toujours "centré" or sur l'exemple que vous m'avez passé le personnage bleu avance de la même façon que les rouges tant qu'on ne l’arrête pas .

  13. #13
    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 Antoine Dess Voir le message
    cela m’empêche de comprendre ce que je peux modifier car a cause de ses problèmes de noms je ne peux pas récupérer des bouts de votre programme pour voir ce que cela pourrai changer.
    Vous devez comprendre avant de ré-utiliser pas juste vous contenter de recopier.
    D'autant qu'il n'est pas si compliqué de faire "from tkinter import *" et virer tous les "tk.".

    Citation Envoyé par Antoine Dess Voir le message
    Autre problème le personnage bleu fait avancer l'image avec lui pour qu'il soit toujours "centré" or sur l'exemple que vous m'avez passé le personnage bleu avance de la même façon que les rouges tant qu'on ne l’arrête pas .
    Idem: çà vous montre comment faire des catégories de personnages avec des listes et çà illustre comment on peut stopper/redémarrer une catégorie. A vous de comprendre comment c'est construit pour l'adapter à votre code.

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

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Justement je recopie pour sortir la ligne de son contexte et voir comment elle marche en étant sortie de son contexte.
    Et justement je passe plus de temps a comprendre comment modifier le tk en tkinter qu'autre chose car vous dites il faut juste supprimer les tk mais lorsque je récupéré des lignes sans tk et que je les testent sur mon programme pyhton me dit que le nom n'est pas reconnu et inversement par exemple juste en essayant de transformer votre tk en tkinter root n'est plus définie et donc le programme ne marche pas.

  15. #15
    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 Antoine Dess Voir le message
    lorsque je récupéré des lignes sans tk et que je les testent sur mon programme pyhton me dit que le nom n'est pas reconnu et inversement par exemple juste en essayant de transformer votre tk en tkinter root n'est plus définie et donc le programme ne marche pas.
    Il faut comprendre ce qu'on recopie pour pouvoir adapter et "comprendre" est une opération qui se passe dans votre cerveau: donc, je ne peux pas le faire à votre place.
    Désolé...
    Ceci dit, si vous ne comprenez pas mon code, vous pouvez toujours poser des questions.

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

  16. #16
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    comme vous le conseillez je vais vous poser des questions sur votre programme.

    Pourquoi mettez vous un %2 avant de créer une nouvelle jambe?
    Pourquoi dans figure_move mettez vous x+= (pareil pour y) sans rien ajouter à x(et a y)?
    Toujours dans figures_move pourquoi mettez vous (legs+1)%4? Je comprends juste qu'on ajoute une deuxième jambe.
    A quoi sert le root ? A définir les boutons ?
    lorsque vous créez les deux personnages rouges je ne comprends pas comment se crée le bleu car vous donnez deux coordonnées pour les rouges avant de les créer et le bleu a ses coordonnées dans sa "définition".
    Dans le toogle pourquoi est-ce des colors. remove et des colors.append ?
    Enfin comment puis-je affecter aux 4 personnages différent une vitesse "propre"?

  17. #17
    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 Antoine Dess Voir le message
    Pourquoi mettez vous un %2 avant de créer une nouvelle jambe?
    Lorsque les jambes bougent en même temps que le déplacement, elles vont trop vite. Je trouve que l'effet visuel est dégueu. Le %2 est là pour ne bouger les jambes qu'un déplacement sur 2.

    Citation Envoyé par Antoine Dess Voir le message
    Pourquoi dans figure_move mettez vous x+= (pareil pour y) sans rien ajouter à x(et a y)?
    Avec Python, x = x + 2 s'écrit aussi x += 2
    Citation Envoyé par Antoine Dess Voir le message
    Toujours dans figures_move pourquoi mettez vous (legs+1)%4? Je comprends juste qu'on ajoute une deuxième jambe.
    Même chose que le %2

    Citation Envoyé par Antoine Dess Voir le message
    A quoi sert le root ? A définir les boutons ?
    "root" est la variable globale à laquelle j'assigne l'instance de Tk. Vous pouvez l'appeler différemment. Et quand on crée des widgets (Button, Canvas, ou autres), il est préférable de préciser leur "parent" (ici, root).

    Citation Envoyé par Antoine Dess Voir le message
    lorsque vous créez les deux personnages rouges je ne comprends pas comment se crée le bleu car vous donnez deux coordonnées pour les rouges avant de les créer et le bleu a ses coordonnées dans sa "définition".
    La fonction create_personnage est définie par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def create_personnage(canvas, x, y, color='red', legs=0):
    où color et legs ont des valeurs, par défaut (utilisées lorsqu'on ne les précise pas).

    Dans le toogle pourquoi est-ce des colors. remove et des colors.append ?
    C'est une façon simple d'enlever 'bleu' de la liste des "personnages" à bouger, le but de l'exemple étant d'avoir de faire des catégories avec un minimum.

    Citation Envoyé par Antoine Dess Voir le message
    Enfin comment puis-je affecter aux 4 personnages différent une vitesse "propre"?
    Si vous avez compris le code, rien ne vous empêche d'ajouter des éléments à la liste personnage = [ x, y, color, legs ] et d'en faire [ x, y, color, legs , dx, dy ]où dx, dy traduiront la "vitesse propre".

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

  18. #18
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci de votre réponse mais,
    je suis en train de modifier votre programme auquel j'ai retiré la partie root et la partie toogleet bien sur la partie vitesse pour donner une vitesse différente a chaque personnage mais python a un problème avec canvas soit il me dit qu'il n'est pas défini soit il me surligne sur la partie création de personnage la parenthèse avant lui en me disant : non default argument follows default arguments pourtant je suis toujours en from tkinter import.
    le premier message apparait quand je laisse le create personnage en canvas, x, y, color='red', legs=0
    et le second s'y je le transforme en canvas, x, y, color='red', legs=0, dx, dy

  19. #19
    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 Antoine Dess Voir le message
    mais python a un problème avec canvas soit il me dit qu'il n'est pas défini soit il me surligne sur la partie création de personnage la parenthèse avant lui en me disant : non default argument follows default arguments pourtant je suis toujours en from tkinter import.
    Ben, c'est que vous ne comprenez pas le code que vous écrivez.
    Si j'ajoute une vitesse différente à chaque personnage, voila ce que je fais:
    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
    import tkinter as tk
    import time
     
    figures = []
    def create_personnage(canvas, x, y, color='red', legs=0, dx=2, dy=2):
        personnage = [ x, y, color, legs, dx, dy ]    
        size = 40
        ccr = canvas.create_rectangle
        ccr(x, y, x+size, y+size, fill=color)
        y0 = y + size + 5
        x0 = x
        if legs % 2:
            ccr(x0, y0, x0+15, y0+10, fill=color)
        else:
            ccr(x0+5, y0, x0+20, y0+10, fill=color)
        x0 = x+25
        if legs % 2:
            ccr(x0, y0, x0+15, y0+10, fill=color)
        else:
            ccr(x0-5, y0, x0+10, y0+10, fill=color)
        return personnage
     
    done = False
    def set_done():
        global done
        done = True
     
    def figures_move(canvas, colors):
        for ix, personnage in enumerate(figures):
            x, y, color, legs, dx, dy = personnage
            if color in colors:
                x += dx
                y += dy
                legs = (legs + 1) % 4
                p = create_personnage(canvas, x, y, color, legs, dx, dy)
                figures[ix] = p # on mémorise la nouvelle position, état.
            else: # on fait du surplace.
                create_personnage(canvas, x, y, color, legs, dx, dy)
     
    root = tk.Tk()
    canvas = tk.Canvas(root)
    canvas.pack()
     
    for x, y in ((10, 10), (45, 80)):
        figures.append(create_personnage(canvas, x, y))
    figures.append(create_personnage(canvas, 55, 0, color='blue', dx=8, dy=8))
     
    colors = ['blue', 'red']
    def do_toggle():
        if 'blue' in colors:
            colors.remove('blue')
        else:
            colors.append('blue')
    tk.Button(root, text='toggle', command=do_toggle).pack()
    tk.Button(root, text='quit', command=set_done).pack()
     
    while not done:
        canvas.delete('all')
        figures_move(canvas, colors)
        root.update()
        time.sleep(0.2)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  20. #20
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    C'est justement ça le problème je ne comprends pas ce que j'écris car c'est de nouvelles choses et de plus (je sais j'insiste) il faut en plus que je comprenne en travaillant sous tk. Donc j'essaye de modifier votre programme pour mieux comprendre.

    Ici je suis toujours a essayer de donner une vitesse différentes a chaque personnages j'ai modifié ceci (je ne sais pas comment afficher les code sous la même forme que vous)
    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
     
    import tkinter as tk
    import time
     
    figures = []
    def create_personnage(canvas, x, y, color='', legs=0, dx=dx, dy=dy):
        personnage = [ x, y, color, legs, dx, dy ]    
        size = 40
        ccr = canvas.create_rectangle
        ccr(x, y, x+size, y+size, fill=color)
        y0 = y + size + 5
        x0 = x
        if legs % 2:
            ccr(x0, y0, x0+15, y0+10, fill=color)
        else:
            ccr(x0+5, y0, x0+20, y0+10, fill=color)
        x0 = x+25
        if legs % 2:
            ccr(x0, y0, x0+15, y0+10, fill=color)
        else:
            ccr(x0-5, y0, x0+10, y0+10, fill=color)
        return personnage
     
    done = False
    def set_done():
        global done
        done = True
    for x, y, dx, dy in ((10, 10, 4, 10), (45, 80, 5, 12)):
    #  et ici pyhton n'aime pas mon dx et dy 
        figures.append(create_personnage(canvas, x, y, color='red', dx, dy))                        
    figures.append(create_personnage(canvas, 55, 0, color='blue', dx=8, dy=8))
     
    colors = ['blue', 'red']
     
    while not done:
        canvas.delete('all')
        figures_move(canvas, colors)
        root.update()
        time.sleep(0.2)

Discussions similaires

  1. probleme sur mon programme
    Par chloecc1991 dans le forum Débuter
    Réponses: 3
    Dernier message: 21/10/2011, 14h43
  2. [TP] Problème avec mon programme de conversion
    Par Panzer95 dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 28/05/2006, 18h36
  3. avie et probleme sur mon site
    Par coucou449 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/12/2005, 09h34
  4. [FLASH MX] Probleme sur mon site....!!
    Par thewill dans le forum Flash
    Réponses: 2
    Dernier message: 07/04/2005, 12h11

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