ich habe mir folgenden Dialog erstellt, der mithilfe einer Combobox
das self.panel_insert dynamisch verändern soll.
Panel_Stage1 bis 3 sind Panelklassen mit unterschiedlichem Aufbau/Layout (Button, Label, etc).
Leider bekomme ich es im Combobox Event nicht hin, das nach Neuzuweisung
des panel_insert=PanelStageX die Objekte innerhalb der Gui wie gewünscht positioniert werden.
Hat jemand ne Idee?
Code: Alles auswählen
class DynLabel(wx.Dialog):
xxx=['Stage 1','Stage 2','Stage 3']
def __init__(self, *args, **kwds):
kwds["style"] = wx.DEFAULT_DIALOG_STYLE
wx.Dialog.__init__(self, *args, **kwds)
self.panel_placeholder = wx.Panel(self, -1)
self.combo_box_choise = wx.ComboBox(self, -1, choices=PreCondition.xxx, style=wx.CB_DROPDOWN|wx.CB_READONLY)
self.panel_insert = wx.Panel(self.panel_placeholder, -1)
self.button_ok = wx.Button(self, -1, "ok")
self.button_abort = wx.Button(self, -1, "abort")
self.__set_properties()
self.__do_layout()
self.Bind(wx.EVT_COMBOBOX, self.evt_combobox_choise, self.combo_box_choise)
self.Bind(wx.EVT_BUTTON, self.evt_button_abort, self.button_ok)
self.Bind(wx.EVT_BUTTON, self.evt_button, self.button_abort)
def __set_properties(self):
self.SetTitle("DynLabel")
self.combo_box_choise.SetMinSize((160, 21))
def __do_layout(self):
grid_sizer_main = wx.FlexGridSizer(3, 1, 5, 5)
grid_sizer_btn = wx.GridSizer(1, 2, 0, 0)
grid_sizer_main.Add(self.combo_box_choise, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 10)
self.sizer_placeholder = wx.BoxSizer(wx.HORIZONTAL)
self.sizer_placeholder.Add(self.panel_insert, 1, wx.EXPAND, 0)
self.panel_placeholder.SetSizer(self.sizer_placeholder)
grid_sizer_main.Add(self.panel_placeholder, 1, wx.EXPAND, 0)
grid_sizer_btn.Add(self.button_ok, 0, wx.ALL|wx.ALIGN_RIGHT, 5)
grid_sizer_btn.Add(self.button_abort, 0, wx.ALL, 5)
grid_sizer_main.Add(grid_sizer_btn, 1, wx.EXPAND, 5)
self.SetSizer(self.grid_sizer_main)
grid_sizer_main.Fit(self)
self.Layout()
def evt_combobox_choise(self, event):
index = self.combo_box_choise.GetSelection()
self.panel_insert.Destroy()
selection=DynLabel.xxx[index]
if(selection=="Stage 1"):
self.panel_insert=Panel_Stage1(self)
self.sizer_placeholder.Add(self.panel_insert, 1, wx.EXPAND, 0)
if(selection=="Stage 2"):
self.panel_insert=Panel_Stage2(self)
self.sizer_placeholder.Add(self.panel_insert, 1, wx.EXPAND, 0)
if(selection=="Stage 3"):
self.panel_insert=Panel_Stage3(self)
self.sizer_placeholder.Add(self.panel_insert, 1, wx.EXPAND, 0)
self.Fit()
self.Layout()
event.Skip()