2016-02-03 12 views
5

Wenn sich die Faltwände ausdehnen, wird der Rahmen nicht mehr angezeigt und Bildlaufleisten werden nicht angezeigt. Ich habe versucht mit einem ScrolledPanel, aber hat nicht geholfen. Irgendeine Idee, was ich hier vermisse?Bildlaufleisten werden beim Erweitern von FoldPanelBar in wxPython nicht angezeigt

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

Leider glaube ich nicht, dass dies mit der 'FoldPanelBar' Klasse möglich ist. Wenn Sie das Ereignis "EVT_CAPTIONBAR" abfangen und "self.pnl.GetSize()" drucken, ist dies immer ein konstanter Wert, was bedeutet, dass die 'FoldPanelBar' niemals die Größe ändert. Sie könnten stattdessen 'wxCollapsiblePane' verwenden, aber Sie könnten das Erscheinungsbild nicht anpassen. – tjohnson

+0

Duplizieren, siehe [Parallelpost in wxpython-Benutzer] (https://groups.google.com/forum/#!topic/wxpython-users/tzjhIIttjH4) – nepix32

+0

Aber es gibt noch keine Lösung. Scheint, dass es keine Bildlaufleisten unterstützt :( – devnull

Antwort

1

Verwenden Sie nicht die Standardgröße FoldPanelBar. Aus irgendeinem Grund scheint es, dass sich das Widget auf eine dumme Weise verhält. Wenn Sie eine Größe angeben, werden die Bildlaufleisten korrekt angezeigt.

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() 

Sie könnten submitting a bug dafür das Projekt WxPython betrachten.

+0

Danke, das hat es behoben. Wenn ich eine Größe übergebe, erscheint die Bildlaufleiste, auch wenn es nur sehr wenige Elemente gibt. Aber das dient dem Zweck. Nochmals vielen Dank! – devnull

+0

Kein Problem. Froh Ich kann helfen –

Verwandte Themen