# Autres langages > Python > GUI > [Python 3.X] Tkinter / affichage d'une image dans un canevas

## willy31

Bonjour  tous,
je viens chercher un peu d'aide concernant un petit programme que j'essaie de rdiger.
 partir d'un script prcdent que j'avais cr dans un contexte d'enseignement pour traiter des images et qui fonctionnait en mode console, je souhaite l'adapter avec une interface graphique.
J'ai trouv quelques tutos pour Tkinter que j'ai essay de mettre en place mais je bute sur l'affichage de l'image dans la fentre via un canevas ...
Il doit y avoir un problme de porte de mon objet Canvas "cnv" mais je ne vois pas comment le rsoudre....
Le canevas est dclar lignes 119 & 120 :


```

```

et l'affichage se fait dans la fonction ouvrirImage lignes 84 & 85 :


```

```

je joins le fichier si besoin
Merci d'avance pour votre aide

P.S : 
- le slicing de la ligne 83 est d au fait que j'utilise un EDI via wine sous ubuntu pour diverses raisons
- au niveau de l'import des modules, je ne suis pas sr de faire l'import de tkinter correctement. Notamment le fait de mettre 

```
from tkinter import *
```

 devrait suffire plutt que d'ajouter 


```

```

----------


## wiztricks

Salut,

Pour illustrer votre problme d'image et de Canvas, pas la peine de poster tout votre code. Vous pourriez le rduire aux seules instructions ncessaires pour reproduire et/ou illustrer de votre soucis.




> Il doit y avoir un problme de porte de mon objet Canvas "cnv" mais je ne vois pas comment le rsoudre....


afficher une image ncessite effectivement que la variable qui rfrence l'image survive  la sortie de la fonction qui la cre (et dans le lien vous trouverez une entre de la FAQ qui raconte une des mthodes pour s'en sortir).

- W

----------


## willy31

> Salut,
> 
> Pour illustrer votre problme d'image et de Canvas, pas la peine de poster tout votre code. Vous pourriez le rduire aux seules instructions ncessaires pour reproduire et/ou illustrer de votre soucis.


Hello,
dsol pour l'abondance alors ;-)
voici donc une version light : 



```

```

esprant que cela soit plus clair
Je suis aussi all voir sur votre lien et cela semble confirmer qu'il me faut dclarer l'image dans le corps du programme pour qu'elle survive  lexcution de la fonction
Toutefois, je ne sais pas lequel des deux cas s'applique  mon cas : utilisation d'un dictionnaire pour garder la rfrence ou bien d'un label ?  ou via la canevas ?

Merci encore
W@m

----------


## wiztricks

> Toutefois, je ne sais pas lequel des deux cas s'applique  mon cas : utilisation d'un dictionnaire pour garder la rfrence ou bien d'un label ?  ou via la canevas ?


Un objet survit  la sortie d'une fonction est stock dans une variable globale (pour faire simple).
Si c'est une simple variable, il faudra utiliser le mot clef global pour que la fonction puisse assigner la nouvelle image. Si c'est un dictionnaire, on va le modifier sans avoir besoin d'assigner autre chose  la variable (globale) qui permet d'y accder (en lecture).
Dans votre tuto. prfr, il doit y avoir un chapitre qui parle de porte des variables et de globals, locals. Le relire serait un plus pour mieux comprendre.

- W

----------


## willy31

C'est bon j'y suis enfin arriv et je pense que le problme venait de ce que j'empaquetais le canvas que dans le corps du programme et non juste aprs avoir cr l'image.
J'ai donc modifi la fonction ainsi :
(je passe notamment le canevas et la fenetre en paramtres)
(j'ai ajout un dictionnaire pour garder la rfrence de l'image hors de la fonction)



```

```

la dclaration du canevas se fait hors de la fonction, dans le corps du programme juste aprs avoir dclar la fentre elle-mme

Merci pour votre aide

----------


## wiztricks

> C'est bon j'y suis enfin arriv et je pense que le problme venait de ce que j'empaquetais le canvas que dans le corps du programme et non juste aprs avoir cr l'image.


L'intrt d'un exemple en quelques lignes est de pouvoir tester (et invalider) ces petites thories (penser que...) qu'on peut faire sur le comportement de tel ou tel objet.

- W

----------

