2011-01-15 11 views
6

Utilizzo una griglia per posizionare due pannelli all'interno di una cornice.Inserimento di elementi (pannelli) all'interno di un wx.GridBagSizer

control_panel = wx.Panel(self, id=ID_CONTROL_PANEL) 
main_panel = wx.Panel(self, id=ID_MAIN_PANEL) 

frame_sizer = wx.GridBagSizer(1, 1) 
frame_sizer.Add(control_panel, (0, 0), (2, 5), flag=wx.EXPAND) 
frame_sizer.Add(main_panel, (2, 0), (5, 5), flag=wx.EXPAND) 
frame_sizer.AddGrowableRow(0) 
frame_sizer.AddGrowableCol(0) 
self.SetSizer(frame_sizer) 

Voglio che il control_panel sia sopra il main_panel (come puoi vedere sopra). Tuttavia questo è l'uscita ottengo:

alt text

Non so il motivo per cui il pannello superiore è così molto più grande del pannello inferiore, quando ho specificato il contrario. (2, 5) per la parte superiore e (5, 5) per la parte inferiore. Ha anche uno strano comportamento quando lo ridimensiono più piccolo, in pratica mi dà quello che voglio (vedi immagine sotto), ma non so come mantenere il rapporto quando lo rendo più grande.

alt text

Tuttavia, quando si avvia il ridimensionamento più grande (anche da parte di una piccola quantità) è possibile vedere (sotto) la forma e rapporto di cambio drasticamente nella direzione opposta (con il fondo diventa molto più piccolo e la parte superiore molto più grande).

alt text

Ancora cercando di imparare questo sizers e non si può davvero trovare questo problema con uno degli esempi che ho visto. Ho anche provato a sperimentare tutti i parametri e fare alcuni test e non riesco a capire cosa sta succedendo qui. Qualsiasi aiuto sarebbe molto apprezzato.

MODIFICA: l'immagine qui sotto è stata aggiunta ai commenti degli aiuti di seguito. alt text

risposta

2

Personalmente, vorrei usare un BoxSizer in orientamento VERTICALE. Ecco un semplice esempio:

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) 

     control_panel = wx.Panel(panel) 
     control_panel.SetBackgroundColour("Yellow") 
     main_panel = wx.Panel(panel) 
     main_panel.SetBackgroundColour("Blue") 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(control_panel, 3, wx.EXPAND) 
     sizer.Add(main_panel, 1, wx.EXPAND) 
     panel.SetSizer(sizer) 

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

Ho cambiato il colore di sfondo di ogni pannello per rendere più facile capire quale è quale. Si noti che ho dato il pannello di controllo una quota del 3 e il pannello principale una percentuale di 1. Si potrebbe desiderare di dare un'occhiata al Inspection Tool Widget, nonché per agevolare la visualizzazione è:

http://wiki.wxpython.org/Widget%20Inspection%20Tool

+0

Posso ancora utilizzare SetMaxSize con questo?Voglio che il pannello superiore rimanga della stessa dimensione (in y, ma espandibile tramite x) ma il pannello in basso da espandere (in xey). – johnharris85

+0

Non sono sicuro ... potresti riuscire a farlo usando sizers annidati per il pannello superiore, ma non lo so. –

1

Delle sette righe e cinque colonne nella griglia è stata specificata solo la prima riga e la prima colonna può essere coltivata.

Il pannello di controllo occupa la prima riga in modo che si espanda occupando lo spazio disponibile.

Il flag wx.EXPAND ha effetto solo se la cella si trova in una riga o colonna crescibile.

+0

Grazie, Ho aggiunto una crescita a tutte le righe e colonne e sembra molto meglio, tuttavia, in realtà vorrei che il pannello superiore si espandesse fino a una certa dimensione, quindi si fermasse. Ma la finestra in basso può continuare a ingrandirsi al ridimensionamento. È possibile? – johnharris85

+0

Provare a utilizzare SetMaxSize per limitare l'altezza del pannello di controllo. È anche possibile correggere l'altezza del pannello di controllo (con SetSize) e non rendere le file occupabili. Oppure puoi giocare con le proporzioni modificando il numero di righe coltivabili che occupano ciascuno di questi due pannelli. –

+0

Ho aggiunto control_panel.SetMaxSize (wx.Size (150, 300)) ma sembra che non abbia fatto nulla, posso comunque espanderlo ovunque. Inoltre (e questo è successo dopo aver reso tutte le righe/colonne modificabili) c'è uno strano spazio che appare ai bordi del fotogramma quando viene ridimensionato a determinate forme (ho aggiunto un'immagine extra di questo sopra). – johnharris85

Problemi correlati