Classe: wxStaticBoxSizer().
Le fonctionnement de ce sizer est identique à celui de wx.wxBoxSizer(), mais à l'intérieur d'une boîte statique, avec un petit liséré encadrant le sizer, et un label de titre.
D'abord, un petit rappel:
Une "StaticBox" ou boîte statique en Français, est un rectangle dessiné pour désigner un regroupement logique d'objets. (boutons, TextCtrl et autres)
Le but de ce Sizer est de calculer à la place du programmeur la position adéquate de la staticBox en fonction de ce qu'elle contient.
Tous les objets internes n'ont pas forcément besoin de suivre le sens d'agrandissement de la StaticBox. Il suffit de modifier en conséquence le coefficient de ratio (param2) pour augmenter ou non, la taille des objets se trouvant à l'intérieur de la StaticBox.
Le schéma type de construction est toujours le même:
staticBoxSizer = wx.wxStaticBoxSizer(wx.wxVERTICAL, parent, "label") --(ou wx.wxHORIZONTAL, parent, "label") staticBoxSizer:Add(param1, param2, param3, param4)
(1)
zéro ou 1, indique que les objets insérés au sizer, conserveront leur dimension original dans le sens defini. (vertical ou horizontal).
(2)
wx.wxGROW (ou wx.wxEXPAND), force la fenêtre à grandir avec le sizer.
wx.wxSHAPED indique à la fenêtre de changer de dimension tout en préservant le ratio original.
Quand le flag wx.wxGROW n'est pas utilisé, l'élément peut être aligné dans l'espace disponible en fonction des indication suivantes:
wx.wxALIGN_LEFT, wx.wxALIGN_TOP, wx.wxALIGN_RIGHT, wx.wxALIGN_BOTTOM,
wx.wxALIGN_CENTER_HORIZONTAL et wx.wxALIGN_CENTER_VERTICAL.
wx.wxALIGN_CENTER précise un alignement Vertical et horizontal.
Par défaut, l'alignement est wx.wxALIGN_TOP + wx.wxALIGN_LEFT.(en haut à gauche)
Une fenêtre appartenant à un sizer peut avoir une bordure, dont les cotés affichés peuvent être spécifiés.
Utilisez wx.wxTOP, wx.wxLEFT, wx.wxRIGHT et wx.wxBOTTOM ou wx.wxALL pour les 4 cotés.
Ces bordures sont invisibles, mais indispensable pour pouvoir créer une marge interne ou "padding".
Pour additionner différents "flags" dans le param3, utilisez le signe "+".
Vous trouverez ci-dessous, la liste des méthodes implémentées par wxLua 2.8.10.
GetStaticBox() | Retourne la boîte statique associé au Sizer. |
L'exemple suivant consiste à positionner dans une StaticBox 6 boutons sur 2 lignes et une barre de saisie pouvant se dilater dans le sens horizontal.
require("wx") -- inutile si on utilise wxluafreeze.exe -- Création de la frame et de son panel. local frame = wx.wxFrame(wx.NULL, -1, "wxStaticBoxSizer") local panel = wx.wxPanel(frame, -1) -- Centrage la frame au milieu de l'écran. frame:Centre(wx.wxBOTH) -- Création du Sizer principal. local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL) -- Création de 2 StaticBoxSizers. local staticBoxSizer = wx.wxStaticBoxSizer(wx.wxVERTICAL, panel, "") local staticBoxSizer2 = wx.wxStaticBoxSizer(wx.wxVERTICAL, panel, "") -- Création des 3 lignes qui recevront les boutons et -- la barre de saisie. local line1 = wx.wxBoxSizer(wx.wxHORIZONTAL) local line2 = wx.wxBoxSizer(wx.wxHORIZONTAL) local line3 = wx.wxBoxSizer(wx.wxHORIZONTAL) -- Création des boutons local bouton1 = wx.wxButton(panel, -1, "Bouton 1") local bouton2 = wx.wxButton(panel, -1, "Bouton 2") local bouton3 = wx.wxButton(panel, -1, "Bouton 3") local bouton4 = wx.wxButton(panel, -1, "Bouton 4") local bouton5 = wx.wxButton(panel, -1, "Bouton 5") local bouton6 = wx.wxButton(panel, -1, "Bouton 6") -- Création de la barre de saisie. local barreSaisie = wx.wxTextCtrl(panel, -1, "Ceci est une barre de saisie") -- On rajoute les boutons aux lignes 1 et 2 et la barre -- de saise à la ligne 3. line1:Add(bouton1, 0, wx.wxALL, 10) line1:Add(bouton2, 0, wx.wxALL, 10) line1:Add(bouton3, 0, wx.wxALL, 10) line2:Add(bouton4, 0, wx.wxALL, 10) line2:Add(bouton5, 0, wx.wxALL, 10) line2:Add(bouton6, 0, wx.wxALL, 10) line3:Add(barreSaisie, 1, wx.wxGROW + wx.wxALL, 10) -- On rajoute les lignes 1, 2 et 3 aux staticBoxSizer. staticBoxSizer:Add(line1, 0, wx.wxALL, 0) staticBoxSizer:Add(line2, 0, wx.wxALL, 0) staticBoxSizer2:Add(line3, 1, wx.wxGROW + wx.wxALL, 0) -- On ajoute les deux staticBoxSizers au sizer principal. mainSizer:Add(staticBoxSizer, 0, wx.wxLEFT + wx.wxRIGHT + wx.wxBOTTOM, 20) mainSizer:Add(staticBoxSizer2, 0, wx.wxGROW + wx.wxLEFT + wx.wxRIGHT + wx.wxBOTTOM, 20) --Et on affecte le sizer principal au Panel panel:SetSizer(mainSizer); -- Démarrage de l'application. wx.wxGetApp():SetTopWindow(frame) frame:Show(true) wx.wxGetApp():MainLoop()
Ce qui donne comme résultat avec un étirement de la "barre de saisie" mais pas des boutons:
Dans l'exemple suivant, nous utiliserons une boîte de dialogue.
Il nous faudra positionner des TextCtrl, des boutons sur 3 lignes et deux boutons en dehors de la staticBox.
require("wx") -- inutile si on utilise wxluafreeze.exe ID_ABOUT_BUTTON = 9 ID_CLOSE_BUTTON = 10 -- Création d'une boîte de dialogue et de son panel local dialog = wx.wxDialog(wx.NULL, wx.wxID_ANY, "Boîte de dialogue", wx.wxDefaultPosition, wx.wxDefaultSize) local panel = wx.wxPanel(dialog, wx.wxID_ANY) -- Centre l'objet dialog au centre de l'écran. dialog:Centre() -- Création d'un Sizer principal pour l'agencement des boutons. local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL) -- Création d'un StaticBoxSizer. (cette fois-ci en deux étapes) local staticBox = wx.wxStaticBox(panel, wx.wxID_ANY, "Texte d'exemple 1") local staticBoxSizer = wx.wxStaticBoxSizer(staticBox, wx.wxVERTICAL) -- Création de 3 lignes local line1 = wx.wxBoxSizer(wx.wxHORIZONTAL) local line2 = wx.wxBoxSizer(wx.wxHORIZONTAL) local line3 = wx.wxBoxSizer(wx.wxHORIZONTAL) -- Création de 3 TextCtrl. local text1 = wx.wxTextCtrl(panel, -1, "ABCD") local text2 = wx.wxTextCtrl(panel, -1, "EFGH") local text3 = wx.wxTextCtrl(panel, -1, "ABCD-EFGH") -- Création des Boutons qui vont avec les text1 et 2. local btText1 = wx.wxButton( panel, -1, "Bouton Texte1") local btText2 = wx.wxButton( panel, -1, "Bouton Texte2") -- Mise en place de la première ligne line1 :Add( text1, 0, wx.wxALL, 5) line1 :Add( btText1, 0, wx.wxALL, 5) -- Mise en place de la deuxième ligne line2 :Add( text2, 0, wx.wxALL, 5) line2 :Add( btText2, 0, wx.wxALL, 5) -- Mise en place de la troisième ligne line3 :Add( text3, 1, wx.wxALL, 5) -- On range les lignes dans le StaticBoxSizer staticBoxSizer:Add( line1, 0, wx.wxALL, 5) staticBoxSizer:Add( line2, 0, wx.wxALL, 5) staticBoxSizer:Add( line3, 1, wx.wxGROW + wx.wxALL, 5) -- Et on met le tout dans le Sizer principal mainSizer:Add( staticBoxSizer, 1, wx.wxGROW+wx.wxALIGN_CENTER + wx.wxALL, 5 ) -- Création des 2 derniers boutons local buttonSizer = wx.wxBoxSizer( wx.wxHORIZONTAL ) local aboutButton = wx.wxButton(panel, ID_ABOUT_BUTTON, "&About") local closeButton = wx.wxButton(panel, ID_CLOSE_BUTTON, "E&xit") --Addition des boutons aux Sizers buttonSizer :Add(aboutButton, 0, wx.wxALIGN_CENTER+wx.wxALL, 5 ) buttonSizer :Add(closeButton, 0, wx.wxALIGN_CENTER+wx.wxALL, 5 ) mainSizer :Add(buttonSizer, 0, wx.wxALIGN_CENTER+wx.wxALL, 5 ) -- Affectation du sizer principal au Panel. panel:SetSizer( mainSizer ) mainSizer:SetSizeHints( dialog ) -- Démarrage de l'application. dialog:Show(true) wx.wxGetApp():MainLoop()
Ce qui donne comme résultat: