# Autres langages > Python > GUI > [Python 2.X] PyQT: Quelle mthode  utiliser hide or close pour fermer une fentre ?

## ammouna340

Bonjour, 

J'ai une fentre qui en cliquant sur un bouton ouvre une nouvelle fentre. Pour fermer la premire fentre, j'ai utilis la mthode hide ou close qui marchent pour moi mais je ne sais pas la diffrence entre ces 2 mthodes ni la meilleure pour mon code. Voici un extrait de mon code : 

```

```

Merci pour votre aide.

----------


## tyrtamos

Bonjour,

Les 2 mthodes sont trs diffrentes:

- "hide" permet de ne pas afficher la fentre, mais elle existe toujours et peut tre r-affiche avec "show". 

- "close" permet de fermer la fentre qui n'existe plus. On peut d'ailleurs aller plus loin:
=> en surchargeant la mthode "closeEvent" pour tester si le contexte ou l'utilisateur permette effectivement la fermeture
=> en demandant au moment du lancement de la fentre que les ressources alloues  la fentre soient dtruites  la fermeture:


```
self.fenetre.setAttribute(QtCore.Qt.WA_DeleteOnClose)
```

----------


## VinsS

Salut,

Il se posent tout de mme quelques questions avec ton montage.

J'ai l'impression que la premire fentre est dj elle-mme un QDialog, dans ce cas une fermeture avec QDialog.accept() serait plus judicieux.

Mais surtout, tu donnes  la nouvelle fentre la premire comme parent, je ne dtruirais donc pas celle-ci avant que soit ferme la dernire fentre.

plutt quelque chose comme a:


```

```

ventuellement, tu peux la cacher pendant l'excution de la dernire fentre, mais, si celle-ci est modale, elle restera toujours au dessus de l'autre.

----------


## ammouna340

J'ai test avec self.accept() et a marche pour moi :


```

```

Mon interface est intgre sous forme de plugin dans QGIS. Quand je la relance j'obtiens la premire interface avec les mmes valeurs d'avant, du coup je rflchis si j'initialise les valeurs et dans ce cas je suis oblige de passer par la mthode close si je comprends bien.



> Salut,
> 
> Il se posent tout de mme quelques questions avec ton montage.
> 
> J'ai l'impression que la premire fentre est dj elle-mme un QDialog, dans ce cas une fermeture avec QDialog.accept() serait plus judicieux.
> 
> Mais surtout, tu donnes  la nouvelle fentre la premire comme parent, je ne dtruirais donc pas celle-ci avant que soit ferme la dernire fentre.
> 
> plutt quelque chose comme a:
> ...

----------


## ammouna340

J'ai utilis la mthode 

```
self.fenetre.setAttribute(QtCore.Qt.WA_DeleteOnClose)
```

 pour dtruire les ressources alloues et j'ai eu cette erreur :


```

```

Pour info, j'intgre mon interface sous forme de plugin dans QGIS, du coup j'aimerais bien initialiser les valeurs de la premire fentre 



> Bonjour,
> 
> Les 2 mthodes sont trs diffrentes:
> 
> - "hide" permet de ne pas afficher la fentre, mais elle existe toujours et peut tre r-affiche avec "show". 
> 
> - "close" permet de fermer la fentre qui n'existe plus. On peut d'ailleurs aller plus loin:
> => en surchargeant la mthode "closeEvent" pour tester si le contexte ou l'utilisateur permette effectivement la fermeture
> => en demandant au moment du lancement de la fentre que les ressources alloues  la fentre soient dtruites  la fermeture:
> ...

----------


## VinsS

C'est probablement parce que tu fermes la fentre avant le nouveau dialogue, dans mon code je le fais aprs.

Et  tu ne gardes pas de rfrence de _dialog_, a peut jouer des tours aussi.

----------


## ammouna340

Bonjour,

J'ai une autre interface et j'ai utilis self.accept() mais a n'a pas march. Voil un extrait de mon code : 



```

```

----------


## VinsS

Tu refais la mme erreur, tu fermes le dialogue avec self.accept() avant d'excuter le dialogue suivant.

Est-ce que la premire fentre de dialogue est vraiment gnante pour la deuxime que tu t'empresses de la fermer ?

Cela dit, empiler les botes de dialogue n'est pas toujours agrable pour l'utilisateur, tu ne peux pas simplifier ton application ? Juste un avis, hein.

----------

