2013-02-24 1 views
2

Je tente d'organiser certains panneaux dans wxPython. Essentiellement, je cherche un panneau gauche et droit, tel que - quand redimensionné - le panneau gauche (orange) (et son contenu) n'est jamais redimensionné, et le le panneau droit (bleu) peut s'étirer ou se développer autant que nécessaire, mais seulement horizontalement.Empêcher la croissance des panneaux dans wxPython

Le code que j'ai jusqu'ici (avec quelques widgets de remplissage aléatoire) est ci-dessous. Mes questions suivent le code:

import wx 
import wx.lib.scrolledpanel as scrolled 

class MainWindow(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent) 

     #add position panel 
     posPnl = IdPanel(self) 
     lbl1 = wx.StaticText(posPnl, label="Position") 
     lbl2 = wx.StaticText(posPnl, label="Size") 
     sizeCtrl = wx.TextCtrl(posPnl) 

     posPnlSzr = wx.BoxSizer(wx.VERTICAL) 
     posPnlSzr.Add(lbl1, 1, wx.FIXED&wx.LEFT) 
     posPnlSzr.Add(sizeCtrl, 1, wx.LEFT&wx.FIXED) 
     posPnlSzr.Add(lbl2, 1, wx.FIXED&wx.LEFT) 

     posPnl.SetSizer(posPnlSzr) 

     posPnl2 = TimelinePanel(self) 
     lbl12 = wx.StaticText(posPnl2, label="Position") 
     lbl22 = wx.StaticText(posPnl2, label="Size") 
     sizeCtrl2 = wx.TextCtrl(posPnl2) 

     posPnlSzr2 = wx.BoxSizer(wx.VERTICAL) 
     posPnlSzr2.Add(lbl12, 1, wx.GROW) 
     posPnlSzr2.Add(sizeCtrl2, 1, wx.GROW) 
     posPnlSzr2.Add(lbl22, 1, wx.GROW) 

     posPnl2.SetSizer(posPnlSzr2) 

     mainSzr = wx.BoxSizer(wx.HORIZONTAL) 
     mainSzr.Add(posPnl, 1, wx.FIXED) 
     #mainSzr.AddSpacer(10) 
     mainSzr.Add(posPnl2, 1, wx.GROW) 

     self.SetSizerAndFit(mainSzr) 
     self.Show() 

class IdPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, -1, size = (400, 200)) 
     self.SetBackgroundColour((255, 0, 255)) 

class TimelinePanel(scrolled.ScrolledPanel): 
    def __init__(self, parent): 
     scrolled.ScrolledPanel.__init__(self, parent, -1, size = (300, 200)) 
     self.SetBackgroundColour((255, 0, 0)) 


app = wx.App(False) 
frame = MainWindow(None, "Trading Client") 
app.MainLoop() 

Mes questions:

  1. Comment puis-je utiliser calibreurs pour assurer que le panneau de droite se développe, et seulement horizontalement? Actuellement, le contenu du panneau de gauche reste fixe, mais le panneau lui-même se développe encore.
  2. Si je voulais modifier légèrement la première question afin que seule la droite se déploie horizontalement, mais que les deux panneaux se déploient verticalement, que devrais-je faire?
  3. J'utilise un wx.lib.scrolledpanel pour l'axe des x pour le panneau droit, mais je n'arrive pas à contracter la fenêtre horizontalement pour la faire apparaître. Je ne suis pas sûr s'il y a un paramètre sur la taille de panneau de mélange/maximum, etc., qui peut aider ceci?

Répondre

6

1: Utilisez l'argument proportion dans sizer.Add lors de l'ajout de vos deux panneaux au principal sizer:

mainSzr.Add(posPnl, 0) 
mainSzr.Add(posPnl2, 1) 

Proportion affecte la façon dont ce panneau redimensionne proportionnellement à tous les autres frères et soeurs calibreurs (où 0 signifie ne pas redimensionner). Les drapeaux wx.FIXED et wx.GROW n'ont aucun rapport avec votre objectif ici.

http://wxpython.org/docs/api/wx.Sizer-class.html#Add

Ainsi, par exemple, si vous voulez à la fois d'augmenter, mais le droit de grandir deux fois plus vite que la gauche, vous pouvez utiliser:

mainSzr.Add(posPnl, 1) 
mainSzr.Add(posPnl2, 2) 

2: Utilisez le wx.EXPAND drapeau pour faire grossir quelque chose dans un calibreur horizontal pour remplir son espace vertical (ou vice versa pour un calibreur vertical/espace horizontal).

mainSzr.Add(posPnl, 0, wx.EXPAND) 
mainSzr.Add(posPnl2, 1, wx.EXPAND) 

3: Ajouter un self.SetupScrolling() à la fonction de TimelinePanel __init__, qui est nécessaire pour un scrolledpanel de fonctionner. Ensuite, lorsque le contenu du panneau est assez grand pour nécessiter des barres de défilement, il sera ajouté.

+0

Excellentes réponses - merci beaucoup! Votre explication des drapeaux/proportions pour la croissance m'a aidé à mieux comprendre wxPython. –

+0

Je suis d'accord avec allie, vous ne trouvez pas ce genre d'explications dans les docs. – alwbtc

Questions connexes