2009-08-14 11 views
10

Ho diversi pulsanti in vari sizers e si espandono nel modo in cui li desidero. Tuttavia, quando aggiungo il genitore a un nuovo wx.BoxSizer che viene utilizzato per aggiungere un bordo attorno a tutti gli elementi nel frame, il sizer che è stato aggiunto funziona correttamente in verticale, ma non in orizzontale.wxPython: gli elementi di BoxSizer non si espandono orizzontalmente, solo verticalmente

Il codice seguente illustra il problema:

#! /usr/bin/env python 

import wx 
import webbrowser 

class App(wx.App): 


    def OnInit(self): 
     frame = MainFrame() 
     frame.Show() 
     self.SetTopWindow(frame) 
     return True 


class MainFrame(wx.Frame): 

    title = 'Title' 


    def __init__(self): 
     wx.Frame.__init__(self, None, -1, self.title) 

     panel = wx.Panel(self) 

     #icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG) 
     #self.SetIcon(icon) 

     sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10) 

     button1 = wx.Button(panel, -1, 'BUTTON') 
     sizer.Add(button1, 0, wx.EXPAND) 

     buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5) 

     buttonDelete = wx.Button(panel, -1, 'Delete') 
     buttonSizer.Add(buttonDelete, 0, 0) 

     buttonEdit = wx.Button(panel, -1, 'Edit') 
     buttonSizer.Add(buttonEdit, 0, 0) 

     buttonNew = wx.Button(panel, -1, 'New') 
     buttonSizer.Add(buttonNew, 0, 0) 

     buttonSizer.AddGrowableCol(0, 0) 

     sizer.Add(buttonSizer, 0, wx.EXPAND|wx.HORIZONTAL) 

     sizer.AddGrowableCol(0, 0) 
     sizer.AddGrowableRow(0, 0) 

     mainSizer = wx.BoxSizer(wx.EXPAND) 
     mainSizer.Add(sizer, 0, wx.EXPAND|wx.ALL, 10) 

     #panel.SetSizerAndFit(sizer) 
     #sizer.SetSizeHints(self) 
     panel.SetSizerAndFit(mainSizer) 
     mainSizer.SetSizeHints(self) 


if __name__ == '__main__': 
    app = App(False) 
    app.MainLoop() 

Commentando le linee e e linee decommentando e rimuove l'extra BoxSizer e mostra come mi aspetto di tutto per la funzione (senza lo spazio bianco, ovviamente).

Sono completamente bloccato con questo problema e ancora non ho idea di come risolverlo.

risposta

24

Prima di tutto, stai trasmettendo alcuni flag in modo errato. BoxSizer accetta wx.HORIZONTAL o wx.VERTICAL, non wx.EXPAND. sizer.Add non accetta wx.HORIZONTAL.

Se si dispone di un BoxSizer VERTICALE, wx.EXPAND eseguirà il riempimento del controllo in senso orizzontale, mentre una proporzione di 1 o più (secondo argomento da aggiungere) renderà il controllo di riempimento verticale. È l'opposto per BoxSizer ORIZZONTALE.

sizer = wx.BoxSizer(wx.VERTICAL) 
sizer.Add(widget1, 0, wx.EXPAND) 
sizer.Add(widget2, 1) 

widget1 si espande orizzontalmente. widget2 si espanderà verticalmente.

Se si inserisce un misuratore in un altro misuratore, è necessario assicurarsi che le proporzioni e i flag EXPAND siano impostati in modo che le sue parti interne crescano come si desidera.

Lascerò il resto a voi.

Problemi correlati