wxLua et wxWidgets:
Mode d'emploi.
 wxWidgets
Lua
Flèche gauche accueil wxWidgets lua notes Flèche droite
Introduction.

Le moyen le plus "basique" de gérer l'agencement des widgets à l'intérieur d'une Frame est de spécifier leur position et leur taille dans l'appel au constructeur.

Si l'on se contente de cette méthode pour positionner les widgets, la tâche devient vite fastidieuse.
Car en effet, il faudra recalculer, à chaque mouvement, la position de chaque widget en fonction des autres via les méthodes adéquates...

LOURD, très très LOURD...

Afin d'épargner aux programmeurs ces complications, les développeurs de wxWidgets ont introduit les "Sizers" dont le rôle est de gérer tout ça automatiquement.

image_sizer

La boîte dans la boîte, qui contient la boîte de la boîte...etc.

Définition.

wxSizer est une classe de base abstraite utilisée pour gérer le positionnement des sous-fenêtres à l'intérieur de la fenêtre mère. Il ne vous est pas possible d'utiliser directement cette classe. Vous devez passer par les classes qui en découlent

Un Sizer est donc un objet dont le seul but est de gérer la disposition d'un jeu de widgets à l'intérieur d'un conteneur. Le Sizer n'est pas un conteneur ou un widget en soit. C'est en réalité une représentation d'un algorithme de positionnement. Tout les Sizers sont des instances d'une sous-classe de la classe abstraite wxSizer.

Explication.

Les Sizers sont indiscutablement la meilleure méthode pour contrôler la disposition des widgets dans les boîtes de dialogue, grâce à leur capacité à pouvoir s'adapter automatiquement aux changements de taille et de style d'une plate-forme à l'autre, et de générer des boîtes de dialogue visuellement agréables sous tous les environnements, à partir d'un code source unique.

L'idée de base est de demander à chaque contrôle individuel sa taille minimale et sa capacité à s'étendre ou à se rétrécir si la taille de la fenêtre parent change. Ceci implique le plus souvent que le développeur ne fixe pas la taille initiale de la boîte de dialogue mais lui affecte un sizer qui la déterminera dynamiquement à l'exécution. Pour cela, le sizer demandera à chacun de ses widgets enfants (qui peuvent être des fenêtres normales ou d'autres sizers) sa taille initiale, et chacun des sizers enfants propage la demande à ses propres enfants, etc...
Ainsi, toute une hiérarchie de sizers se construit et s'adapte automatiquement à tout changement.

Vous remarquerez que la classe wxSizer ne dérive pas de wxWindow et que par conséquent un sizer n'est pas une fenêtre et consomme très peu de ressources comparé à une vraie fenêtre.

Les sizers sont extrêmement bien adaptés aux boîtes de dialogue cross-plates-formes car chaque contrôle ne calcule que sa propre taille et donc l'algorithme peut sans problème gérer les disparités de tailles de widgets d'une plate-forme à l'autre. Par exemple, si la taille de la police standard sous "x" est plus grande que sous Windows, alors la boîte de dialogue apparaîtra automatiquement plus grande sous "x" que sous Windows.

Quand on utilise les Sizers, on ne spécifie pas de position ou de taille lors de l'appel au constructeur du widget. En revanche, on peut utiliser les constantes wxDefaultPosition et wxDefaultSize de la façon suivante:

nomBouton = wx.wxButton(nomParent, ID, label, 
                       wx.wxDefaultPosition, wx.wxDefaultSize, 
                       style, validator, name
  )

Utilisation des Sizers.

Cette partie sur les sizers présente la façon de procéder pour positionner des éléments sur une fenêtre (ou un panneau) sans se soucier de la taille de l'écran ou de la police des caractères.

C'est une méthode "automatique" permettant une utilisation simple des logiciels de création d'interfaces.

Les deux méthodes sont assez simples, mais il paraît évident que la méthode Sizer est plus sûre et aussi plus simple.

Supposez que vous ayez 16 boutons et une zone de texte à disposer , soit 17x4=68 contraintes à gérer avec la première méthode, alors qu'il n'y aurait que 2 sizers avec la deuxième méthode. Même en automatisant le processus, on se retrouve avec un programme plus lourd à comprendre et à écrire.

En conclusion.

Six sizers sont mis à la disposition du programmeur sous wxLua.

  1. wxBoxSizer()
  2. wxStaticBoxSizer()
  3. wxStdDialogButtonSizer()
  4. wxGridSizer()
  5. wxFlexGridSizer()
  6. wxGridBagSizer()
logo wxWidgets Le savoir ne vaut que s'il est partagé par tous...
logo-internet_32x32.png Dernière mise à jour, le 31 octobre 2012.
Valid XHTML 1.0 Transitional

Les sizers
Revenir en Haut
Connexion à la base de données impossible