WxPython: FoldPanelBar pas vraiment pliant
Question
J'ai écrit le code suivant à l'aide de FoldPanelBar:
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()
Voici à quoi ça ressemble avant de plier:
texte de remplacement http://img23.imageshack.us/img23/4309/before .gif
La zone de texte de droite se trouve dans le panneau des plis. Par conséquent, lorsque je clique sur la flèche, elle disparaît. Cependant, cela ressemble à ceci:
texte de remplacement http://img22.imageshack.us/img22/6306/afterz .gif
Je m'attendais à ce que la zone de texte gauche grossisse de manière à remplir tout le cadre.
Qu'est-ce que je fais de travers?
La solution
Cela fait ce que vous voulez, je pense. Je n'ai pas testé plusieurs panneaux dans le panneau pliant, il se peut que vous deviez limiter explicitement sa taille pour l'empêcher de devenir trop large.
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()