ich habe da ein kleines Problemchen.
Hier zuerst mal eine kleine Beschreibung und weiter unten dann ein wenig Python. Das Original ist viel zu verschachtelt, deshalb habe ich das ganze mal auf ein Minibeispiel heruntergebrochen.
Ich habe einen "MainDialog" (hier im Bsp. nur 2 Buttons) und dann noch einen "Erweitert-Dialog" (zum Spaß ein wenig Text in einem Sizer (1) und dann noch Radiobuttons in einem zweiten Sizer (2)).
Den "Erweitert-Dialog" muss ich schon in der init des MainDialogs initialisieren, stelle ihn aber noch nicht dar. Wenn jetzt der Button 1 gedrückt wird, soll der Erweitert Dialog dargestellt werden und dann aber nur der Sizer (1). Bei Button 2 soll entsprechend nur Sizer (2) dargestellt werden. Das klappt auch, aber jetzt hätte ich auch noch gerne, dass sich der gesamte Dialog verkleinert. Und genau das bekomme ich nicht hin. Ich denke, dass die Ursache in der "frühen" Initialisierung liegt.
Ich kann leider nicht die betreffenden Sizer schon beim Initialisieren löschen, denn der User kann sie eventuell durch Events sich anzeigen lassen.
So dann mal hier vom Prinzip wie das ganze bis jetzt aussieht. (das ganze unter Windows XP, mit Python 2.5 und wxWidgets 2.8.2)
Code: Alles auswählen
import wx
class DialogMain(wx.Dialog):
def __init__(self, parent, id, title,
pos = wx.DefaultPosition, size = wx.DefaultSize,
style = wx.DEFAULT_DIALOG_STYLE ):
wx.Dialog.__init__(self, parent, id, title, pos, size, style)
self.anzeigen = 1
item0 = wx.BoxSizer( wx.VERTICAL )
item1 = wx.Button( self,-1, "Button 1", wx.DefaultPosition, wx.DefaultSize, 0 )
item0.Add( item1, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
item2 = wx.Button( self,-1, "Button 2", wx.DefaultPosition, wx.DefaultSize, 0 )
item0.Add( item2, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
self.SetSizer(item0)
item0.SetSizeHints( self )
# PanelErweitert initialisieren, aber noch nicht darstellen
self.erweitert = DialogErweitert(self,-1,"ew")
wx.EVT_BUTTON(self, item1.GetId(), self.OnButton1)
wx.EVT_BUTTON(self, item2.GetId(), self.OnButton2)
self.TransferDataToWindow()
def OnButton1(self, event):
self.anzeigen = 1
self.TransferDataToWindow()
self.erweitert.ShowModal()
def OnButton2(self, event):
self.anzeigen = 2
self.TransferDataToWindow()
self.erweitert.ShowModal()
def TransferDataToWindow(self):
if self.anzeigen == 1:
self.erweitert.GetSizer().Show(self.erweitert.SIZER_1, True, True)
self.erweitert.GetSizer().Show(self.erweitert.SIZER_2, False, True)
if self.anzeigen == 2:
self.erweitert.GetSizer().Show(self.erweitert.SIZER_1, False, True)
self.erweitert.GetSizer().Show(self.erweitert.SIZER_2, True, True)
class DialogErweitert(wx.Dialog):
def __init__(self, parent, id, title,
pos = wx.DefaultPosition, size = wx.DefaultSize,
style = wx.DEFAULT_DIALOG_STYLE ):
wx.Dialog.__init__(self, parent, id, title, pos, size, style)
item0 = wx.BoxSizer( wx.VERTICAL )
item1 = wx.BoxSizer( wx.HORIZONTAL )
self.SIZER_1 = item1
item2 = wx.StaticText( self, -1, "text", wx.DefaultPosition, wx.DefaultSize, 0 )
item1.Add( item2, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
item3 = wx.StaticText( self, -1, "text", wx.DefaultPosition, wx.DefaultSize, 0 )
item1.Add( item3, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
item0.Add( item1, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
item4 = wx.FlexGridSizer( 0, 2, 0, 0 )
self.SIZER_2 = item4
item5 = wx.RadioButton( self, -1, "Radio", wx.DefaultPosition, wx.DefaultSize, 0 )
item4.Add( item5, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
item6 = wx.RadioButton( self, -1, "Radio", wx.DefaultPosition, wx.DefaultSize, 0 )
item4.Add( item6, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
item7 = wx.RadioButton( self, -1, "Radio", wx.DefaultPosition, wx.DefaultSize, 0 )
item4.Add( item7, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
item8 = wx.RadioButton( self, -1, "Radio", wx.DefaultPosition, wx.DefaultSize, 0 )
item4.Add( item8, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
item0.Add( item4, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
self.SetSizer(item0)
item0.SetSizeHints( self )
if __name__ == "__main__":
app = wx.PySimpleApp()
frm = wx.Frame(None,-1,"test")
frm.CentreOnScreen(wx.BOTH)
frm.Show()
pnl = DialogMain(frm,-1,"bla")
pnl.ShowModal()
app.MainLoop()
So langsam kommen mir Zweifel, ob das so überhaupt funktioniert, deshalb bin ich über jeden Hinweis sehr dankbar.
noch einen schönen Abend
Barbara