2010-06-23 24 views
3

je un cadre WxPython contenant un seul élément, par exemple:Obtenir un élément de panneau WxPython pour développer

class Panel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.text = wx.StaticText(self, label='Panel 1') 

J'ai un cadre contenant plusieurs panneaux, dont celui-ci, et les dimensions sont régies par calibreurs. Je voudrais que ce StaticText se développe. L'utilisation d'un BoxSizer contenant uniquement le texte et le réglage du drapeau wx.EXPAND fait l'affaire, mais il semble stupide d'utiliser un calibreur pour un seul élément.

Une solution plus simple?

(je pourrais ajouter le StaticText au calibreur du cadre parent directement, mais pour ma conception, il est plus logique de commencer par un cadre directement.)


Je viens de réaliser que lors de la création d'un BoxSizer avec un élément ne fonctionne pas avec wx.VERTICAL:

class Panel1(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.BackgroundColour = 'red' 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     self.Sizer = sizer 
     self.list = wx.ListBox(self, choices=[str(i) for i in xrange(100)]) 
     sizer.Add(self.list, 0, wx.EXPAND) 
     sizer.Fit(self) 

Bien sûr, il est ok avec un article, mais si je veux ajouter un élément verticalement plus tard et encore faire les deux expand (par exemple, lorsque la fenêtre de l'utilisateur est étendu)?

Édition: ah, je viens de découvrir que cette proportion doit être utilisée pour faire croître les boxsizers dans les deux sens. (Par exemple, remplacez 0 par 1 dans l'appel BoxSizer.Add.)

Répondre

6

Un wx.Frame le fera automatiquement s'il n'a qu'un seul enfant. Cependant, un wx.Panel ne le fera pas automatiquement. Vous êtes coincé en utilisant un calibreur. Si vous vous trouvez, il fait beaucoup, juste faire une fonction pratique:

def expanded(widget, padding=0): 
    sizer = wx.BoxSizer(wx.VERTICAL) 
    sizer.Add(widget, 1, wx.EXPAND|wx.ALL, padding) 
    return sizer 

class Panel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.text = wx.StaticText(self, label='Panel 1') 
     self.SetSizer(expanded(self.text)) 

j'ai jeté l'attribut de remplissage là-dedans comme un bonus supplémentaire. N'hésitez pas à l'utiliser ou à l'abandonner.

+0

Merci. Avez-vous une idée concernant mon édition? –

+0

Oui, la proportion fait grandir dans la direction du calibreur. wx.EXPAND l'agrandit pour remplir l'autre direction. Utilisez-les tous les deux pour grandir dans les deux directions. – FogleBird