كسبيثون: FoldPanelBar ليس للطي حقا
سؤال
ولقد كتابة التعليمات البرمجية التالية باستخدام 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()
وهذا هو ما يبدو قبل للطي:
نص بديل http://img23.imageshack.us/img23/4309/before GIF.
وهذا النص الصحيح هو في لوحة أضعاف، وذلك عندما كنت اضغط على السهم، فإنه يختفي. ومع ذلك، يبدو مثل هذا:
نص بديل http://img22.imageshack.us/img22/6306/afterz GIF.
وتوقعت النص الأيسر لتنمو في حجم لملء الإطار كله.
وماذا أفعل الخطأ؟
المحلول
وهذا لا ما تريد على ما أعتقد. أنا لم تختبر لوحات متعددة في foldpanelbar، قد تحتاج للحد من حجم 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, 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()
لا تنتمي إلى StackOverflow