Hallo!
Wie ihr es sicher aus dem Betreff rauslesen könnt, geht es um wxWidgets/wxPython. Ja, ich habe im IRC gefragt (keine Antwort) und das Mailarchiv durchsucht (ich habe dort nicht gefragt, weil es zu viel Traffic ist).
Folgende Situation:
Ich habe einen BoxSizer in einem BoxSizer und möchte den inneren verstecken (auch mit allen controls drinnen). Nun, ich gehe in einer for schleife die controls durch und nute Show(False). So weit so gut. Nun, aber es gleicht eine lücke im fenster, also nehme ich den äußeren BoxSizer und nutze Remove() um den inneren rauszulöschen. Super! Aber wenn ich versuche den Sizer wieder mit Add() oder Insert() hinzuzufügen dann geht das nicht weil ich statt einem wx.BoxSizer ein wx.PyDeadObject habe. Ich weis auch warum: weil Remove() den Sizer 'destroy()t', aber das will ich nicht. Nun in der wxWidget 2.5.1 Doku steht dass es Detach() gibt, das das gleiche wie Remove ist, nur halt ohne destroy(). Das Problem ist: mein sizer hat kein Detach()! Robin Dunn sagte, dass es ab wxPy version 2.5 Detach geben soll (das habe ich ja!). Hilfe!
Btw: ich hab auch andere dinge versucht, wie sizer.Show(False) aber dann
hängt sich python.
System:
WinXPSP1, Python 2.3.4, wxPython 2.5.1.5u
Was kann ich machen?
grüße,
Leonidas
wx.Sizer und Detach
Hi Leonidas
hab mal ein kleines Beispiel gebastelt.
(hab noch die alte wxPython Version... aber vom Prinzip sollte es gehen)
hab mal ein kleines Beispiel gebastelt.
(hab noch die alte wxPython Version... aber vom Prinzip sollte es gehen)
Code: Alles auswählen
from wxPython.wx import *
class MyFrame1(wxFrame):
def __init__(self, *args, **kwds):
kwds["style"] = wxDEFAULT_FRAME_STYLE
wxFrame.__init__(self, *args, **kwds)
self.button_1 = wxButton(self, wxNewId(), "button_1")
self.button_2 = wxButton(self, wxNewId(), "button_2")
self.button_3 = wxButton(self, wxNewId(), "button_3")
self.button_4 = wxButton(self, wxNewId(), "button_4")
EVT_BUTTON( self, self.button_3.GetId(), self.OnBtn3 )
EVT_BUTTON( self, self.button_4.GetId(), self.OnBtn4 )
self.SetTitle("Frame 1")
self.__do_layout()
def __do_layout(self):
self.sizer_1 = wxBoxSizer(wxVERTICAL)
self.sizer_2 = wxBoxSizer(wxVERTICAL)
self.sizer_2.Add(self.button_1, 0, 0, 0)
self.sizer_2.Add(self.button_2, 0, 0, 0)
self.sizer_1.Add(self.sizer_2, 0, 0, 0)
self.sizer_1.Add(self.button_3, 0, 0, 0)
self.sizer_1.Add(self.button_4, 0, 0, 0)
self.SetAutoLayout(1)
self.SetSizer(self.sizer_1)
self.sizer_1.Fit(self)
self.sizer_1.SetSizeHints(self)
self.Layout()
def OnBtn3( self, evt ):
self.sizer_1.Show( self.sizer_2, False )
self.sizer_1.Layout()
def OnBtn4( self, evt ):
self.sizer_1.Show( self.sizer_2, True )
self.sizer_1.Layout()