Hallo Christian!
Hier habe ich ein Beispiel für dich:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
class FirstPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, size = (200, 300))
self.SetBackgroundColour("green")
self.SetSizeHints(200, 300)
class SecondPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, size = (300, 400))
self.SetBackgroundColour("yellow")
self.SetSizeHints(300, 400)
class MyFrame(wx.Frame):
def __init__(
self, parent = None, id = -1, title = "Example"
):
wx.Frame.__init__(self, parent, id, title)
panel = wx.Panel(self)
self.panel = panel
vbox_main = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_main)
self.inner_sizer = wx.BoxSizer(wx.VERTICAL)
vbox_main.Add(self.inner_sizer, 0, wx.ALL, 5)
self.inner_panel = FirstPanel(panel)
self.inner_sizer.Add(self.inner_panel, 0, wx.ALL, 5)
btn_change = wx.Button(panel, label = "Change")
vbox_main.Add(btn_change, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5)
btn_change.Bind(wx.EVT_BUTTON, self.change_panels)
panel.Fit()
self.Fit()
self.SetSizeHintsSz(self.GetSize())
def change_panels(self, event = None):
self.panel.Freeze()
# Altes Panel aus dem Sizer raus nehmen
self.inner_sizer.Detach(self.inner_panel)
# Austauschen
if isinstance(self.inner_panel, FirstPanel):
self.inner_panel.Destroy()
self.inner_panel = SecondPanel(self.panel)
else:
self.inner_panel.Destroy()
self.inner_panel = FirstPanel(self.panel)
self.inner_sizer.Add(self.inner_panel)
self.SetSizeHints(-1, -1)
self.panel.Fit()
self.Fit()
self.SetSizeHintsSz(self.GetSize())
self.panel.Thaw()
def main():
"""Testing"""
app = wx.PySimpleApp()
f = MyFrame()
f.Center()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
mfg
Gerold
