In einem Panel mit 3 vertikal angeordneten Panels (Zuordnung über wx.GridBagSizer ) besteht die Mitte aus 2 nebeneinander angeordenten Panels.
Wenn ich z.B. den Inhalt des linken mittleren Panels ändere, möchte ich gerne, dass die Höhe des gesamten mittleren Panels angepasst wird (ohne jedoch die Breite zu ändern)
Das gelingt mir nicht. Wenn ich ein -Fit- durchführe, werden die Breiten ebenfalls geändert. Die gesamte Höhe der mittleren Spalte bleibt gleich, auch wenn das farbige Panel im Inneren in der Höhe geändert wird.
Das untere (blaue) Panel rückt aber dabei nicht nach oben.
Nachstehender Code zum Problem:
-----------------------------------------------------------------------------------------------
Code: Alles auswählen
import wx
from wx.core import LI_VERTICAL
class MyFrame(wx.Frame):
def __init__(self, parent=None, title=u'- TEST -'):
wx.Frame.__init__(self, parent, -1, title=title)
self.SetMinSize((750,370)) # verhindert ein Resize unter diese Werte
self.panel = wx.Panel(self, style=wx.FULL_REPAINT_ON_RESIZE) # das Panel das alle anderen aufnimmt
self.mainSizer = wx.GridBagSizer(5,5) # und der zugehörige Main-Sizer
# das obere Panel
self.pnl1 = wx.Panel(self.panel, size=(-1, 50), style=wx.BORDER_SIMPLE)
self.pnl1.SetBackgroundColour(wx.Colour("KHAKI"))
# das linke Panel zur Aufnahme aller links befindlichen widgets
self.liPnl = wx.Panel(self.panel, size=(350, -1), style=wx.BORDER_SIMPLE)
self.liPnl.SetBackgroundColour(wx.Colour("LIME GREEN"))
txt = "Zeile -1-\nZeile -2-\nZeile -3-\nZeile -4-\nZeile -5-\nZeile -6-\nZeile -7-\nZeile -8-"
self.t1 = wx.StaticText(self.liPnl, label=txt, style=wx.TE_MULTILINE)
self.t1.SetFont(wx.Font(wx.FontInfo(12).Bold()))
self.liSizer = wx.BoxSizer(wx.VERTICAL)
self.liSizer.Add(self.t1, 1, wx.EXPAND|wx.ALL, 10)
self.liPnl.SetSizer(self.liSizer)
# das rechte Panel zur Aufnahme aller rechts befindlichen widgets
self.rePnl = wx.Panel(self.panel, size=(350, -1), style=wx.BORDER_SIMPLE)
self.rePnl.SetBackgroundColour(wx.Colour(245,245,150))
self.t2 = wx.StaticText(self.rePnl, label="das rechte Panel")
self.reSizer = wx.BoxSizer(wx.VERTICAL) # der zugehörige Sizer
self.reSizer.Add(self.t2, flag=wx.ALL, border=5)
self.rePnl.SetSizer(self.reSizer)
# eine vertikale Linie zwischen den beiden mittleren Panels
sl = wx.StaticLine(self.panel, style=LI_VERTICAL)
# das untere Panel für die Buttons
self.btnPnl = wx.Panel(self.panel, size=(-1, 50), style=wx.BORDER_SIMPLE)
self.btnPnl.SetBackgroundColour(wx.Colour("SKY BLUE"))
self.btn1 = wx.Button(self.btnPnl,-1,label=u'Liste verkleinern')
self.Bind(wx.EVT_BUTTON, self.btn1Click, self.btn1)
self.btnSizer = wx.BoxSizer(wx.HORIZONTAL) # und der zugehörige Sizer
self.btnSizer.Add(self.btn1, 0, flag=wx.ALL, border=5)
self.btnPnl.SetSizer(self.btnSizer)
# ----------- alles zusammensetzen ------------------------------------------------------
self.mainSizer.Add(self.pnl1, pos=(0,0), span=(1,3), flag=wx.EXPAND|wx.LEFT, border=5)
self.mainSizer.Add(self.liPnl, pos=(1,0), flag=wx.EXPAND|wx.LEFT, border=5)
self.mainSizer.Add(sl, pos=(1,1), flag=wx.EXPAND)
self.mainSizer.Add(self.rePnl, pos=(1,2), flag=wx.EXPAND)
self.mainSizer.Add(self.btnPnl, pos=(2,0), span=(1,3), flag=wx.EXPAND|wx.LEFT, border=5)
self.panel.SetSizer(self.mainSizer)
def btn1Click(self, event):
self.t1.SetLabel("Zeile -1-\nZeile -2-\nZeile -3-\nZeile -4-")
self.liSizer.Fit(self.liPnl)
self.reSizer.Fit(self.rePnl)
self.Layout()
if __name__ == "__main__":
app = wx.App()
frame = MyFrame(None)
frame.Show(True)
app.MainLoop()