# Autres langages > Python > GUI >  Rcuprer le type de surface avec Pygame

## PascalStl

Bonjour  tous,

a fais un bon moment que je cherche sur le net un peu partout, mais j'ai rien trouv qui rpond vraiment  ma question...

Donc la voici,

je cherche  savoir s'il existe une faon simple et propre pour savoir si une surface est en ralit l'cran elle-mme.

un exemple vaut mille mots:

screen = pygame.display.set_mode((800,600)) <-- a c'est une surface qui est l'cran

frame = pygame.Surface((800,600)) <-- a c'est une surface normal

Mon problme c'est que je me suis cr une bibliothque de bouton, label, cadre, champs de texte... qui fonctionne  l'aide de frame(cadre)

Lorsque j'appel un objet de type bouton par exemple, je vais lui dire de ce coller sur une surface, par exemple la surface frame_1, et l, il va
se placer  l'intrieur de celle-ci en prennent en compte l'emplacement de cette surface sur l'cran. Je fais ceci en utilisant le Rect de la surface.

Pour rappel, toute surface obtient automatiquement un Rect lorsqu'elle est cr, sauf l'cran.
Pour obtenir le Rect de l'cran je dois obtenir sa surface : pygame.display.get_surface() puis aprs je peux aller chercher sont Rect

Sauf que si j'essaie d'aller chercher la surface de l'cran et que ce n'est pas l'cran mais une surface normal, mon code plante.
J'ai bien russi quand mme  me dbrouiller avec des try: et except: mais je trouve a mal propre un peu.

Donc, existe t'il une faon simple de savoir si c'est l'cran ou une surface normal, ou encore mieux de rcuprer le Rect de tout les types de
surface.

Merci.

----------


## josmiley

> Pour rappel, toute surface obtient automatiquement un Rect lorsqu'elle est cr, sauf l'cran.


tu as vu a o ? Tout au plus les subsurfaces ont un offset par rapport  la surface parent.




> Sauf que si j'essaie d'aller chercher la surface de l'cran et que ce n'est pas l'cran mais une surface normal, mon code plante.


que veux-tu dire par "aller chercher" ?




> Donc, existe t'il une faon simple de savoir si c'est l'cran ou une surface normal




```
ma_frame is pygame.display.get_surface() ?
```

----------


## PascalStl

Et bien j'ai vue sa dans la doc de pygame. pygame.Surface.get_rect() c'est qui veut dire que d'une faon ou d'une autre, il y a un Rect dans l'objet non?



```

```

En gros, je voulais savoir s'il n'a pas une faon de faire plus simple  ::?: 
Gardez en tte que je suis trs trs dbutant  ::P: 

Si c'est pas asser clair je peux mettre le code de mon module en entier, il est fonctionnel mais pas trs propre encore

----------


## Kurodiam

> Et bien j'ai vue sa dans la doc de pygame. pygame.Surface.get_rect() c'est qui veut dire que d'une faon ou d'une autre, il y a un Rect dans l'objet non?
> 
> 
> 
> ```
> 
> ```
> 
> En gros, je voulais savoir s'il n'a pas une faon de faire plus simple 
> ...


Je suis dans la mme situation que la tienne "dbutant en qute de savoir " , sauf que toi , t'as mieux fait ta prsentation ,moi, j'avais dit que j'tais un bb en python  ::mouarf::

----------


## josmiley

pygame.Surface.get_rect() retourne un Rect tir des dimensions de la surface.

ensuite, pygame.Surface.subsurface peut correspondre  ce que tu veux faire.
envoies quand mme le module.

----------


## PascalStl

Je vous mets le module. Il possde 4 objets soit un pour les Frames, un pour les Labels, un pour les Boutons et un pour les Champs de texte.

Comme je vous disais, c'est un code de dbutant et pas vraiment uniforme car je rajoutais des choses au fur et  mesure.

J'ai quand mme essay de garder une logique. J'ai galement essay de faire de l'hritage en crant une classe matre car beaucoup dattributs
et de fonctions se rptent mais a ne marchait jamais... J'avais toutes sortes d'erreurs. Mais a c'est un autre problme  ::P: 

Pour utiliser le module, il faut l'importer  :;):  , ensuite crer un objet du type que l'on veut en lui donnant (obligatoire) la surface sur laquelle on veut le voir
(a peut-tre l'cran lui-mme ou bien une autre surface), puis lui passer les attributs que l'on veut (facultatif). Puis plus loin, on le blit sur l'cran en
appelant sa mthode .display(). Si vous avez beaucoup d'objets, vous pouvez stocker tous les objets dans une liste et appeler la mthode display()
 travers une boucle for. a fait plus clean.

Si certains se sentent en forme, vous pouvez amliorer le code et le poster, a me permettra d'apprendre de vrais pros  ::D: 



```

```

----------


## josmiley

hriter de Surface pour un systme de pseudo-fentrage, je vois.
mais pour faire des widgets bouton, texte, etc ... j'hriterai plutt de Rect.

----------


## PascalStl

oui sauf qu'il me faut une surface pour l'affichage, non? Si jessaie d'afficher un rect je verrais rien dans la fentre...

A moins qu'il y est un truc que je connais pas  ::P:

----------

