# Autres langages > Python > GUI > [Python 3.X] Python dplacer une image

## Revilome

Bonjour, 
J'ai un projet  faire pour le bac et le sujet est une serre automatise. J'essai donc de faire un programme pour montrer comment la serre ragirait dans certaines conditions ( une sorte de simulation ).
J'ai russi  faire apparatre et disparatre des images mais quand il s'agit de les faire se dplacer je n'arrive pas  les arrter.   


J'essai de faire bouger une image mais je n'arrive pas  la faire sarrter, elle continue de descendre.



```

```

Et j'aimerais aussi savoir comment faire un enchanement de "mouvement d'images" comme une sorte de vido avec des pauses(dlais d'environ 2sec) entre chaque tapes, Exemple :  
1: Arroser les plantes (Dplacer l'image/objet image_eau en boucle)
2: Faire pousser les plantes (Remplacer l'image de la plante par une autre image)
3: Arrter l'arrosage (Arrter la boucle qui affiche image_eau)
4:Faire mourir les plantes (Changer l'image de la plante par une autre)

J'ai essayer de faire cela avec le timer.sleep(2) mais il n'affiche que le rsultat du programme et non les tapes qui le compose.

Sinon j'ai pens  un autre moyen de faire cela beaucoup plus facilement, avec des vidos mais je ne trouve aucun tuto sur comment ajouter une vido dans une fentre tkinter.

Voici le code en entier : j'ai oublier de dexpliquer ce que chaque bloque fait et certaines fonctions sont vide car je ne peut pas les remplir pour l'instant. 


```

```


Merci!

----------


## bistouille

Salut.




> J'essai de faire bouger une image mais je n'arrive pas  la faire sarrter, elle continue de descendre.


 ton avis,  quoi correspond eau_coords[0] ?




> Et j'aimerais aussi savoir comment faire un enchanement de "mouvement d'images" comme une sorte de vido avec des pauses(dlais d'environ 2sec) entre chaque tapes, Exemple :  
> 1: Arroser les plantes (Dplacer l'image/objet image_eau en boucle)
> 2: Faire pousser les plantes (Remplacer l'image de la plante par une autre image)
> 3: Arrter l'arrosage (Arrter la boucle qui affiche image_eau)
> 4:Faire mourir les plantes (Changer l'image de la plante par une autre)
> 
> J'ai essayer de faire cela avec le timer.sleep(2) mais il n'affiche que le rsultat du programme et non les tapes qui le compose.


Tu dois faire cela avec la mthode after comme pour le dplacement, et tout a tu peux le grer avec des dclencheurs qui ne seront rien d'autres que des variables, boolennes ou autres que tu devras actualiser selon les vnements se produisant dans ta serre.

----------


## Revilome

> Salut.
> 
> 
> 
>  ton avis,  quoi correspond eau_coords[0] ?
> 
> 
> 
> Tu dois faire cela avec la mthode after comme pour le dplacement, et tout a tu peux le grer avec des dclencheurs qui ne seront rien d'autres que des variables, boolennes ou autres que tu devras actualiser selon les vnements se produisant dans ta serre.


Salut,

J'ai regard des tutos et des docs sur coords pour savoir  quoi coords[0] correspond, il semblerait qu'il corresponde aux "coordonnes du plus bas" mais quels coordonnes ? X,  Y ou les deux ?. Et qu'il faut mettre des tuples dedans.
Je sais pas mais je ne pense pas que "[]" et "()" soient la mme chose, sinon j'ai vu que l'ont peut mettre coords(x1,y1,x2,y2). x1 et y1 devraient tre les coordonnes de base et x2,y2 les nouvelles coordonnes ? 
Donc en gros je ne sais pas a quoi correspond coords[0].

Merci pour m'avoir montr la mthode after, c'est exactement ce qu'il me fallait! 
Mais j'ai juste essay quelques tests et je n'ai trouv que  moyen de faire une boucle, y aurait-il un moyen de "reset" le temps aprs : 

```
canvas.after(500+z, autre_fonction)
```

 pour ne pas avoir  rajouter 2 autres variables et tre plus prcis?



```

```



```

```

Merci beaucoup

----------


## bistouille

La mthode Canvas.coords sur un item de type image retourne un x et y correspondant au centre de l'image, donc eau_coords[0] correspond au x, et donc, ta comparaison dans ta condition doit s'effectuer sur le y (eau_coords[1]), et non sur le x.

En ce qui concerne ta boucle, il suffit de grer les deux indpendamment.



```

```



```

```

----------


## Revilome

Bonjour, 

J'ai russi  faire comme tu m'as dit pour pour dplacer image_eau et a fonctionne!
Mais pour la boucle je n'ai pas compris, la premire boucle va de 2  40 avec un pas de 8 et la deuxime, de 5  55 avec un pas de 11 mais elles se terminent avant que la fonction fc_arrosage finisse.
J'ai cris a : 

```

```

Ce qui place l'image dans la fentre et l'anime et quand l'animation est termin dplace l'image hors de la fentre, il ne me reste plus qu'a trouver comment le placer dans un boucle.

----------


## wiztricks

Salut,




> il ne me reste plus qu'a trouver comment le placer dans un boucle.


Prenez le temps de lire la rponse que j'avais faites  une discussion rcente et de comprendre le chapitre sur les animations avec tkinter de notre tuto. prfr.

- W

----------


## Revilome

> Salut,
> 
> 
> 
> Prenez le temps de lire la rponse que j'avais faites  une discussion rcente et de comprendre le chapitre sur les animations avec tkinter de notre tuto. prfr.
> 
> - W


Merci! 

J'ai russi!

Mais je viens de tomber sur un autre problme, j'essais d'utiliser des variables qui on t dfinies dans des fonctions donc j'utilise le "return" : 


```

```

Puis dans une autre fonction je rappel la fonction prcdente pour l'utiliser : 


```

```

Mais une erreur s'affiche : NameError: name 'val' is not defined 

J'ai russi  passer des variables entre des fonctions sans de variables entre les parenthses de la fonction :


```

```

Je vois bien que c'est le var qui bloque le programme mais je ne sais pas comment dfinir une variable entre les parenthses d'une fonction.

Merci encore

----------


## wiztricks

Salut,




> Je vois bien que c'est le var qui bloque le programme mais je ne sais pas comment dfinir une variable entre les parenthses d'une fonction.


On ne peut pas, il faut dfinir la variable avant de la passer en argument de la fonction.
Vous n'tes pas au bout de vos peines, car avec tkinter, certaines fonctions ne seront pas appele depuis un endroit de votre code mais par tkinter lui mme: impossible de rcuprer leur retour et difficile de leur passer des arguments.
Pour y voir plus clair, il va falloir passer un peu de temps dans les tutos.

- W

----------


## Revilome

> Salut,
> 
> 
> 
> On ne peut pas, il faut dfinir la variable avant de la passer en argument de la fonction.
> Vous n'tes pas au bout de vos peines, car avec tkinter, certaines fonctions ne seront pas appele depuis un endroit de votre code mais par tkinter lui mme: impossible de rcuprer leur retour et difficile de leur passer des arguments.
> Pour y voir plus clair, il va falloir passer un peu de temps dans les tutos.
> 
> - W


Ah d'accord merci, je vais m'y mettre maintenant. 
Mais sinon es-ce-que je pourrais changer les sliders pour des spinboxs ? Ou es-ce-que j'aurais le mme problme ?

----------


## Revilome

> Ah d'accord merci, je vais m'y mettre maintenant. 
> Mais sinon es-ce-que je pourrais changer les sliders pour des spinboxs ? Ou es-ce-que j'aurais le mme problme ?


Je viens d'essayer avec une spinbox et a fonctionne ! Donc je vais changer mes slider pour des spinboxs mme si c'est moins beau.
Merci

----------

