Panel dynamisch verändern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
B-Baer
User
Beiträge: 23
Registriert: Donnerstag 5. August 2010, 11:56

Hallo,

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()
BlackJack

@B-Baer: Kann es sein, dass Du da versuchst `wx.Choicebook` neu zu erfinden?
B-Baer
User
Beiträge: 23
Registriert: Donnerstag 5. August 2010, 11:56

@BlackJack Das choicebook könnte für meine Bedürfnisse vielleicht das richtige sein (kannte ich noch nicht :o ). Ich bin gerade auf der Suche nach nem Beispiel, damit ich das Ganze verifizieren kann.
Antworten