2009-05-02 11 views
1

ich den folgenden Code geschrieben haben, mit FoldPanelBar:WxPython: FoldPanelBar nicht wirklich Falten

import wx 
import wx.lib.agw.foldpanelbar as fpb 

class frame(wx.Frame): 
    def __init__(self,*args,**kwargs): 
     wx.Frame.__init__(self,*args,**kwargs) 
     self.text_ctrl_1=wx.TextCtrl(self,-1,style=wx.TE_MULTILINE) 

     self.fpb=fpb.FoldPanelBar(self,-1, style=fpb.FPB_HORIZONTAL) 
     self.fold_panel=self.fpb.AddFoldPanel("Thing") 
     self.thing=wx.TextCtrl(self.fold_panel,-1, size=(400,-1), style=wx.TE_MULTILINE) 
     self.fpb.AddFoldPanelWindow(self.fold_panel, self.thing) 

     self.sizer_1=wx.BoxSizer(wx.HORIZONTAL) 

     self.sizer_1.Add(self.text_ctrl_1,1,wx.EXPAND) 
     self.sizer_1.Add(self.fpb,1,wx.EXPAND) 

     self.SetSizer(self.sizer_1) 

     self.Show() 



if __name__=="__main__": 
    app=wx.PySimpleApp() 
    frame(None,-1) 
    app.MainLoop() 

Dies ist, was es sieht aus wie vor dem Falten:

alt text http://img23.imageshack.us/img23/4309/before.gif

Die richtige Textbox ist in der Falten, wenn ich auf den Pfeil klicke, verschwindet er. Allerdings sieht es wie folgt aus:

alt text http://img22.imageshack.us/img22/6306/afterz.gif

ich die linke Textbox erwartet in der Größe zu wachsen, um den gesamten Rahmen zu füllen.

Was mache ich falsch?

Antwort

1

Das macht, was Sie wollen, denke ich. Ich habe nicht mehrere Panels in der Foldpanelbar getestet, Sie müssen möglicherweise die Größe der Foldpanelbar explizit begrenzen, um zu verhindern, dass sie zu weit wird.

import wx 
import wx.lib.agw.foldpanelbar as fpb 

class frame(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 
     self.text_ctrl_1=wx.TextCtrl(self, -1, size=(400, 100), 
            style=wx.TE_MULTILINE) 
     self.fpb = fpb.FoldPanelBar(self, -1, 
      style=fpb.FPB_HORIZONTAL|fpb.FPB_DEFAULT_STYLE) 
     self.fold_panel = self.fpb.AddFoldPanel("Thing") 
     self.thing = wx.TextCtrl(self.fold_panel, -1, size=(400, -1), 
           style=wx.TE_MULTILINE) 
     self.fpb.AddFoldPanelWindow(self.fold_panel, self.thing) 
     self.fpb.Bind(fpb.EVT_CAPTIONBAR, self.onCaptionBar) 
     self.sizer_1 = wx.BoxSizer(wx.HORIZONTAL) 
     self.sizer_1.Add(self.text_ctrl_1, 1, wx.EXPAND) 
     self.sizer_1.Add(self.fpb, 0, wx.EXPAND) 
     self.SetSizer(self.sizer_1) 
     self.ResizeFPB() 

    def onCaptionBar(self, event): 
     event.Skip() 
     wx.CallAfter(self.ResizeFPB) 

    def ResizeFPB(self): 
     sizeNeeded = self.fpb.GetPanelsLength(0, 0)[2] 
     self.fpb.SetMinSize((sizeNeeded, self.fpb.GetSize()[1])) 
     self.Fit() 


app = wx.App(0) 
f = frame(None) 
f.Show() 
app.MainLoop()