2016-02-03 2 views
0

Я попытался сделать складной FoldPanelBar внутри ScrollPanel. Но это не загрузка содержимого FoldPanelBar. Интерфейс управления списком на панели сложения не загружается. Я попытался заменить обычную панель, но результат тот же. Не могли бы вы сообщить мне, если я что-то упустил?Как сделать FoldPanelBar внутри ScrollPanel в wxPython?

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

class MyPanel(wx.lib.scrolledpanel.ScrolledPanel): 

    def __init__(self, parent): 
     wx.lib.scrolledpanel.ScrolledPanel.__init__(self, parent=parent, size=parent.GetSize(), style = wx.ALL|wx.EXPAND) 
     self.SetAutoLayout(1) 
     self.SetupScrolling() 

     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) 
     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) 
     btnGo = wx.Button(item, wx.ID_ANY, "Go", size=(50,-1)) 
     m_pnl.AddFoldPanelWindow(item, btnGo) 

     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 


if __name__ == '__main__': 
    app = wx.App(False) 
    frame = wx.Frame(None, size=(650, 400), style=wx.DEFAULT_FRAME_STYLE) 
    panel = MyPanel(frame) 
    frame.Show() 
    app.MainLoop() 

ответ

2

Я вижу две проблемы с вашим примером. Во-первых, столбцы не отображаются в обычном режиме списка wx.ListCtrl. Установите LC_REPORT стиль следующим образом:

self.listContainer = wx.ListCtrl(item, style=wx.LC_REPORT) 

Secondary, нет надлежащего Оформление печатных/проклейки здесь происходит.

# ... 
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) 

Применяя эти изменения на WxPython классического 3.0.2 (МЫ) по меньшей мере, элементы управления layouted так, что они заполняют рамку.

+0

Спасибо! Вот и все :) – devnull

+0

Элемент управления списком появился, но полосы прокрутки не отображаются, хотя при изменении размера рамки. – devnull

+0

Да, я также видел, что (нет полос прокрутки). Поскольку я не использую ни '' ScrolledPanel'', ни '' FoldPanelBar', я там не помогаю. Может быть, было бы лучше не смешивать их в любом случае, потому что они достигают того же (с ограниченным пространством в окне) разными способами? – nepix32