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

Programmation multimédia/Jeux Python Discussion :

Animation de gauche à droite et de droite à gauche d'une image [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    février 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : février 2019
    Messages : 35
    Points : 21
    Points
    21
    Par défaut Animation de gauche à droite et de droite à gauche d'une image
    Bonjour à tous,

    J'ai une image .gif que je souhaite déplacer de gauche à droite dans une fenêtre tkinter, puis arrivée en bout de fenêtre je voudrai que l'image rebrousse chemin, donc que l'image fasse un aller-retour tout en restant sur la même ligne.

    J'ai réussi à réaliser la fonction déplacement (déplacement1) pour l'aller de gauche à droite de l'image, mais quand j'insère dans le script une deuxième fonction déplacement (déplacement2) pour simuler le retour de l'image, ça plante ! Il n'y a même plus d'aller....
    Voici ci-dessous mon script. Pouvez-vous m'aider à résoudre mon problème ? Que dois-je modifier dans mon programme pour observer l'aller ET le retour de mon image dans la fenêtre tkinter ? Merci.

    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
     
    from tkinter import *
     
     
    tk = Tk()
     
    Height=500
    Width=800
     
    def deplacement1():
        img_coords = canvas.coords(image)
        img_width = img_2.width()
        img_height = img_2.height()
     
        if img_coords[0] + img_width <= 800:
              canvas.move(image, 5, 0)
              tk.after(40, deplacement1)
     
    def deplacement2():
     
        img_coords = canvas.coords(image)
        img_width = img_2.width()
        img_height = img_2.height()
     
        if img_coords[0] + img_width !=0:
     
            canvas.move(image, -5, 0)
            tk.after(40, deplacement2)
     
     
    canvas= Canvas(tk, width = Width, height = Height)
    canvas.pack()
     
    imgfile = "/Users/OLIVIER/Desktop/serpent2.png"
     
    img= PhotoImage(file=imgfile)
     
    img_2 = img.subsample(2,2)
    image = canvas.create_image(50,200, image=img_2)
     
     
    deplacement1()
    deplacement2()
     
    tk.mainloop()

  2. #2
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2013
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2013
    Messages : 1 109
    Points : 1 500
    Points
    1 500
    Par défaut
    Pas le temps d'approfondir mais tu as vu que dans un cas, tu as <= et l'autre !=0 ?
    Parce que dans le deuxième cas, si cela ne tombe pas juste...
    Pas d'aide par mp.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    février 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : février 2019
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Oui j ai bien vu.
    Je pensais que cela etait correct:
    Si la somme des coordonnees sur l axe des "x" est differente de zero, faire decroitre l abscisse de 5 pixels

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 481
    Points : 24 497
    Points
    24 497
    Par défaut
    Salut,

    Si toutes les 40 Ms, vous exécutez animation1 et animation2,
    • à t0 + 40 Ms, vous allez déplacer l'image à droite de 5 puis à gauche de 5,
    • à t0 + 80 Ms, vous allez déplacer l'image à droite de 5 puis à gauche de 5,
    • ...

    et donc çà fera du surplace...

    Si vous voulez garder cette structure, il faut déclencher animation2 lorsque animation1 touche le bord et réciproquement (ou avoir une seule fonction qui ajoute un déplacement qui change de signe).

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    février 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : février 2019
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Merci pour cette remarque.
    Je vais tenter de trouver une solution

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Une manière de le faire pourrait être de rajouter un "else" dans chaque fonction et d'appeler les fonctions l'une dans l'autre.
    Pour illustrer mon propos :

    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
    def deplacement1():
        img_coords = canvas.coords(image)
        img_width = img_2.width()
        img_height = img_2.height()
     
        if img_coords[0] + img_width <= 800:
              canvas.move(image, 5, 0)
              tk.after(40, deplacement1)
        else:
            canvas.move(image, -5, 0)
            tk.after(40, deplacement2)
     
    def deplacement2():
     
        img_coords = canvas.coords(image)
        img_width = img_2.width()
        img_height = img_2.height()
     
        if img_coords[0] + img_width >= 0:
            canvas.move(image, -5, 0)
            tk.after(40, deplacement2)
        else:
            canvas.move(image, 5, 0)
            tk.after(40, deplacement1)
    De cette manière, tu peux faire des allers-retours permanent ou un simple aller-retour en supprimant le "else" de la fonction "deplacement2"

  7. #7
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    février 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : février 2019
    Messages : 35
    Points : 21
    Points
    21
    Par défaut Merci !
    Bonjour,

    Merci pour cette proposition. Je vais tester.
    Bonne journée !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/01/2009, 15h43
  2. Mettre une image à Gauche et à droite sans déformer le formulaire du centre
    Par Darbon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 21
    Dernier message: 07/10/2006, 13h54
  3. [CSS] aligner texte à gauche d'une image
    Par ilood dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 05/06/2005, 17h04

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