# Autres langages > Python > GUI >  Aide comprhension code tkinter

## outiat

Bonjour,

J'aimerais une aide pour comprendre ce code :


```

```

Je ne comprend pas du tout comment il marche --'
Pour ajouter une page j'ai bien compris quoi changer etc sauf que je ne comprend pas le pourquoi du comment il fonctionne

Merci bonne soire

----------


## Beginner.

Salut,

Apparemment ce code "cre" plusieurs frames et on peut afficher telle ou telle frame en cliquant sur les boutons...

----------


## outiat

Salut,

Oui j'ai bien compris sauf que je ne comprend pas comment il marche

----------


## Beginner.

Ben est-ce qu'il y a une partie en particulier que tu ne comprends pas ?

----------


## danielhagnoul

::salut:: 

Votre code vient de : How to change and show a new window in Tkinter


C'est  frame.tkraise() qui parcours les frames.




> "raise" permets de placer "devant" (ou au-dessus) un widget qui serait masqu par un autre. On pourrait avoir ce cas-l en affichant les deux widgets avec .place ( la mme position par exemple).

----------


## outiat

Je ne comprend pas l'appel de la mthode show_frame qui marche en dehors de la class ni comment elle marche vraiment.
La boucle je n'arrive pas  comprend comment elle marche non plus ^^

En gros je n'ai pas compris grand chose  ::):

----------


## wiztricks

> Je ne comprend pas l'appel de la mthode show_frame qui marche en dehors de la class ni comment elle marche vraiment.


La rponse rapide est que c'est une mthode du contrleur que chaque page reoit en argument. Et la mthode longue serait de vous expliquer des rudiments de POO mais vous trouverez cela dans n'importe quel bon tuto.





> La boucle je n'arrive pas  comprend comment elle marche non plus ^^


La seule boucle du code est celle ci:


```

```

Les class sont des objets comme les autres.

On peut donc crer un tuple (StartPage,PageOne,PageTwo) sur lequel itrer pour crer chaque page, l'afficher en ligne, colonne = (0, 0) et sauvegarder l'instance associe  la page/class dans un dictionnaire.

Le grid manager va empiler tout  au mme endroit et vous verriez la dernire page cre s'afficher s'il n'y avait pas le self.show_frame(StartPage) pour placer "StartPage" au dessus (et la rendre visible).




> En gros je n'ai pas compris grand chose


On peut crire un programme qui fait la mme chose sans POO et sans empiler les frames, ... 

- W

----------


## Beginner.

> La boucle je n'arrive pas  comprend comment elle marche non plus ^^


Cette boucle "cre" les trois frames StartPage, PageOne et PageTwo :  

```
for F in (StartPage, PageOne, PageTwo):     frame = F(container, self)    frame.grid(row=0, column=0, sticky='nsew')    self.frames[F] = frame
```

 Linstruction frame = F(container, self) quivaut  frame = StartPage(container, self) au premier tour de boucle... Elle quivaut  frame = PageOne(container, self) au second tour de boucle et  frame = PageTwo(container, self) au troisime tour de boucle.  Chacune de ces trois frames est stocke dans le dico * self.frames* 


> Je ne comprend pas l'appel de la mthode show_frame qui marche en dehors de la class ni comment elle marche vraiment.


Ben cette fonction affiche une des trois frames contenues dans le dico * self.frames* dont on a parl ci-dessus :  

```
def show_frame(self, cont):     frame = self.frames[cont]     frame.tkraise()
```

  Le frame  afficher est sectionne via le paramtre *cont*... La fonction est lance quand on clique sur un bouton, par exemple quand on clique sur ce bouton: button1 = tk.Button(self, text='Page 1', command=lambda: controller.show_frame(PageOne)) le paramtre *cont* vaudra *PageOne* et c'est donc cette frame qui sera affiche.  


> Je ne comprend pas l'appel de la mthode show_frame qui marche en dehors de la class ni comment elle marche vraiment.


Je ne suis pas sr de comprendre ce que tu veux dire par "qui marche en dehors de la class" mais cette fonction est une mthode de la class *SeaofBTCCApp* et *controller* est une instance de cette class donc on peut lancer cette fonction en faisant par exemple :  controller.show_frame(PageOne) tout comme app.show_frame(PageOne)...

----------


## Beginner.

Ah ben *wiztricks* a dj rpondu, je n'avais pas vu sa rponse...

----------

