2010-09-23 5 views
1

Ok j'ai une demande, je codage et essaie d'obtenir une mise en page plus simple à ceci: Sizer Alignment with all the input boxes alignedGUI wxPython BoxSizers

Remarquez comment le texte est justifié à gauche et les boîtes d'entrée sont tous alignés, je vois cela dans le code de démo wxPython, mais ils utilisent tous le calibreur flexgrid et j'essaie de n'utiliser que des BoxSizers (parce qu'ils sont plus simples et parce que je ne comprends qu'un peu de calibreurs et que je me bats avec BoxSizers, en 6 mois j'aurais même plus difficile)

J'ai essayé d'avoir l'entrée et le texte dans deux calibreurs verticaux, puis de les mettre dans un calibreur horizontal, ne marchait pas parce que le texte n'était pas aligné avec t il entre. J'ai également essayé de faire cela et d'avoir aussi chaque texte, l'appariement des entrées dans un calibreur, pire encore. Aucune suggestion?

+3

Ma suggestion: vous aurez juste ** ** avez Pour en savoir plus sur Flexgrid si vous voulez des mises en page fantaisie comme celle-ci, les boxsizers sont juste ** pas ** suffisamment flexibles pour répondre à vos spécifications de mise en page exigeantes. –

+0

Je peux créer n'importe quelle mise en page avec seulement BoxSizers. Vous avez juste besoin d'un BoxSizer Vertical et de 3 BoxSizer horizontaux. Vous devez placer des espaceurs si vous avez besoin d'un espace blanc entre les widgets ou vous pouvez simplement utiliser les indicateurs de taille: mySizer.Add (widget, 0, wx.RIGHT, 10) Cela signifie que vous devez ajouter 10 pixels de tampon sur la droite. –

Répondre

3

Voici un exemple simple en utilisant seulement BoxSizers:

import wx 

class MyForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial") 

     # Add a panel so it looks the correct on all platforms 
     panel = wx.Panel(self, wx.ID_ANY) 

     # create the labels 
     lblOne = wx.StaticText(panel, label="labelOne", size=(60,-1)) 
     lblTwo = wx.StaticText(panel, label="lblTwo", size=(60,-1)) 
     lblThree = wx.StaticText(panel, label="lblThree", size=(60,-1)) 

     # create the text controls 
     txtOne = wx.TextCtrl(panel) 
     txtTwo = wx.TextCtrl(panel) 
     txtThree = wx.TextCtrl(panel) 

     # create some sizers 
     mainSizer = wx.BoxSizer(wx.VERTICAL) 
     lineOneSizer = wx.BoxSizer(wx.HORIZONTAL) 
     lineTwoSizer = wx.BoxSizer(wx.HORIZONTAL) 
     lineThreeSizer = wx.BoxSizer(wx.HORIZONTAL) 

     # add widgets to sizers 
     lineOneSizer.Add(lblOne, 0, wx.ALL|wx.ALIGN_LEFT, 5) 
     lineOneSizer.Add(txtOne, 0, wx.ALL, 5) 
     lineTwoSizer.Add(lblTwo, 0, wx.ALL|wx.ALIGN_LEFT, 5) 
     lineTwoSizer.Add(txtTwo, 0, wx.ALL, 5) 
     lineThreeSizer.Add(lblThree, 0, wx.ALL|wx.ALIGN_LEFT, 5) 
     lineThreeSizer.Add(txtThree, 0, wx.ALL, 5) 

     mainSizer.Add(lineOneSizer) 
     mainSizer.Add(lineTwoSizer) 
     mainSizer.Add(lineThreeSizer) 

     panel.SetSizer(mainSizer) 

# Run the program 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyForm() 
    frame.Show() 
    app.MainLoop() 

Mais c'est un peu en désordre, voici donc une version remaniée:

import wx 

class MyForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial") 

     # create the main sizer 
     self.mainSizer = wx.BoxSizer(wx.VERTICAL) 

     # Add a panel so it looks the correct on all platforms 
     self.panel = wx.Panel(self, wx.ID_ANY) 

     lbls = ["labelOne", "lblTwo", "lblThree"] 
     for lbl in lbls: 
      self.buildLayout(lbl) 
     self.panel.SetSizer(self.mainSizer) 

    #---------------------------------------------------------------------- 
    def buildLayout(self, text): 
     """""" 
     lblSize = (60,-1) 
     lbl = wx.StaticText(self.panel, label=text, size=lblSize) 
     txt = wx.TextCtrl(self.panel) 

     sizer = wx.BoxSizer(wx.HORIZONTAL) 
     sizer.Add(lbl, 0, wx.ALL|wx.ALIGN_LEFT, 5) 
     sizer.Add(txt, 0, wx.ALL, 5) 
     self.mainSizer.Add(sizer) 

# Run the program 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyForm() 
    frame.Show() 
    app.MainLoop() 
1

Pour la plupart des dispositions autres que les plus basiques, vous ne pouvez pas échapper à l'aide d'un certain nombre de types différents de calibreurs afin de réaliser votre conception.

Here est un bon tutoriel sur les calibreurs.

+0

Salut @volting, je crois que votre lien 'Ici' pointe vers cette même page ?! Était-ce prévu ?! – sdaau

+0

hmmm c'est bizarre, certainement pas destiné ... J'ai mis à jour avec un lien vers un tutoriel – volting