2016-02-03 13 views
5

में FoldPanelBar का विस्तार करने पर प्रकट नहीं हो रहे हैं जब फ़ोल्ड पैनल विस्तारित होते हैं, तो यह फ्रेम के बाहर जाता है और स्क्रॉल बार दिखाई नहीं दे रहे हैं। मैंने स्क्रॉल किए गए पैनेल का उपयोग करने की कोशिश की, लेकिन मदद नहीं की। कोई विचार क्या मैं यहाँ याद कर रहा हूँ?स्क्रॉलबार WxPython

import wx 
from wx.lib import scrolledpanel 
import wx.lib.agw.foldpanelbar as fpb 
import wx.lib.scrolledpanel as sp 

class MyPanel(sp.ScrolledPanel): 

    def __init__(self, parent): 
     sp.ScrolledPanel.__init__(self, parent=parent, size=parent.GetSize(), style = wx.ALL|wx.EXPAND) 
     #self.SetAutoLayout(1) 
     self.SetupScrolling() 
     ##self.boxSizer = wx.BoxSizer(wx.VERTICAL)### 
     csStyle = fpb.CaptionBarStyle() 
     csStyle.SetFirstColour(wx.Colour(190, 190, 190, 255)) 
     csStyle.SetSecondColour(wx.Colour(167, 232, 146, 255)) 
     csStyle.SetCaptionFont(wx.Font(9, wx.DEFAULT, wx.NORMAL, wx.BOLD)) 

     m_pnl = fpb.FoldPanelBar(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 
          fpb.FPB_VERTICAL) 

     item = m_pnl.AddFoldPanel("Set 1", collapsed=True, cbstyle=csStyle) 

     self.listContainer = wx.ListCtrl(item, style=wx.LC_REPORT) 
     self.listContainer.InsertColumn(0, 'Column1', width=250) 
     self.listContainer.InsertColumn(1, 'Column2', width=150) 
     self.listContainer.InsertColumn(2, 'Column3') 

     m_pnl.AddFoldPanelWindow(item, self.listContainer) 
     btnAutoFix = wx.Button(item, wx.ID_ANY, "Go", size=(50,-1)) 
     m_pnl.AddFoldPanelWindow(item, btnAutoFix) 
     ###self.boxSizer.Add(m_pnl)## 


     item = m_pnl.AddFoldPanel("Set 2", collapsed=True, cbstyle=csStyle) 
     self.listContainer2 = wx.ListCtrl(item, style=wx.LC_REPORT) 
     self.listContainer2.InsertColumn(0, 'Column1', width=250) 
     self.listContainer2.InsertColumn(1, 'Column2', width=150) 
     self.listContainer2.InsertColumn(2, 'Column3') 

     m_pnl.AddFoldPanelWindow(item, self.listContainer2) 

     self.pnl = m_pnl 
     ##self.SetSizer(self.boxSizer)### 

if __name__ == '__main__': 
    app = wx.App(False) 
    frame = wx.Frame(None, size=(650, 400), style=wx.DEFAULT_FRAME_STYLE) 
    panel = MyPanel(frame) 
    # Add sizer information for the scrolled panel 
    szmain = wx.BoxSizer(wx.VERTICAL) 
    szmain.Add(panel.pnl, 1, wx.EXPAND|wx.ALL, 4) 
    panel.SetSizer(szmain) 
    frame.Show() 
    app.MainLoop() 
+0

दुर्भाग्य से, मुझे नहीं लगता कि यह 'FoldPanelBar' वर्ग' का उपयोग करके संभव है। यदि आप 'EVT_CAPTIONBAR' ईवेंट पकड़ते हैं और 'self.pnl.GetSize() प्रिंट करते हैं, तो यह हमेशा एक निरंतर मान होता है, जिसका अर्थ है कि' FoldPanelBar 'कभी भी आकार बदलता नहीं है। आप शायद इसके बजाय 'wxCollapsiblePane' का उपयोग कर सकते हैं, लेकिन आप इसकी उपस्थिति को अनुकूलित करने में सक्षम नहीं होंगे। – tjohnson

+0

डुप्लिकेट, देखें [wxpython-users में समानांतर पोस्ट] (https://groups.google.com/forum/#!topic/wxpython-users/tzjhIIttjH4) – nepix32

+0

लेकिन अभी तक कोई समाधान नहीं है। ऐसा लगता है कि यह स्क्रॉलबार का समर्थन नहीं करता है :( – devnull

उत्तर

1

FoldPanelBar का डिफ़ॉल्ट आकार का उपयोग न करें। किसी कारण से, ऐसा लगता है कि विजेट एक गूंगा तरीके से व्यवहार करता है। यदि आप एक आकार निर्दिष्ट करते हैं, तो स्क्रॉलबार सही तरीके से दिखाई देते हैं।

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

class MyPanel(scrolled.ScrolledPanel): 

    def __init__(self, parent): 
     scrolled.ScrolledPanel.__init__(self, parent=parent, 
             size=parent.GetSize(), 
             style = wx.ALL|wx.EXPAND) 
     #self.SetAutoLayout(1) 
     self.SetupScrolling() 
     self.boxSizer = wx.BoxSizer(wx.VERTICAL) 
     csStyle = fpb.CaptionBarStyle() 
     csStyle.SetFirstColour(wx.Colour(190, 190, 190, 255)) 
     csStyle.SetSecondColour(wx.Colour(167, 232, 146, 255)) 
     csStyle.SetCaptionFont(wx.Font(9, wx.DEFAULT, wx.NORMAL, wx.BOLD)) 

     m_pnl = fpb.FoldPanelBar(self, wx.ID_ANY, wx.DefaultPosition, (600,800), 
          fpb.FPB_VERTICAL) 

     item = m_pnl.AddFoldPanel("Set 1", collapsed=True, cbstyle=csStyle) 

     self.listContainer = wx.ListCtrl(item, style=wx.LC_REPORT) 
     self.listContainer.InsertColumn(0, 'Column1', width=250) 
     self.listContainer.InsertColumn(1, 'Column2', width=150) 
     self.listContainer.InsertColumn(2, 'Column3') 

     m_pnl.AddFoldPanelWindow(item, self.listContainer) 
     btnAutoFix = wx.Button(item, wx.ID_ANY, "Go", size=(50,-1)) 
     m_pnl.AddFoldPanelWindow(item, btnAutoFix) 
     self.boxSizer.Add(m_pnl) 


     item = m_pnl.AddFoldPanel("Set 2", collapsed=True, cbstyle=csStyle) 
     self.listContainer2 = wx.ListCtrl(item, style=wx.LC_REPORT) 
     self.listContainer2.InsertColumn(0, 'Column1', width=250) 
     self.listContainer2.InsertColumn(1, 'Column2', width=150) 
     self.listContainer2.InsertColumn(2, 'Column3') 

     m_pnl.AddFoldPanelWindow(item, self.listContainer2) 

     self.pnl = m_pnl 
     self.SetSizer(self.boxSizer) 

class MainFrame(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, title='Test') 
     panel = MyPanel(self) 
     self.Show() 


if __name__ == '__main__': 
    app = wx.App(False) 
    frame = MainFrame() 
    app.MainLoop() 

आप wxPython परियोजना के लिए इस बात के लिए submitting a bug सोच सकते हैं।

+0

धन्यवाद, यह तय किया गया है। जब मैं आकार में जाता हूं, तो बहुत कम आइटम होने पर भी स्क्रॉल बार दिखाई देता है। लेकिन यह उद्देश्य प्रदान करता है। धन्यवाद फिर से! – devnull

+0

कोई समस्या नहीं। मैं मदद कर सकता है –