2011-10-17 90 views
1

我一直在玩弄這一段時間,只是似乎無法弄清楚。 self.panel = wx.Panel(self,wx.ID_ANY)ScrolledPanel裏面板沒有調整尺寸

我有一個不滾動的面板內的滾動面板。

self.panel = wx.Panel(self, wx.ID_ANY) 
self.stepPanel = wxscrollpanel.ScrolledPanel(self.panel, -1, style=wx.EXPAND) 
self.stepPanel.SetupScrolling(scrollToTop=False) 

sizer = wx.BoxSizer(wx.VERTICAL) 
self.stepPanel.SetSizerAndFit(sizer) 

更新功能是這樣的......

sizer = self.stepPanel.GetSizer() 
# Add some widgets 
self.stepPanel.SetSizerAndFit(sizer) 

我的小部件添加到分級機以後,當用戶點擊一個按鈕...我已經試過自動佈局,FitInside()更新()...似乎無法滾動此stepPanel時,我添加小部件。

編輯:添加更多的信息.​​..

這裏的想法是,self.panel具有在不滾動的頂部(只是一個面板)的區域,而下部滾動(self.stepPanel ),但看起來stepPanel從self.panel的可視區域增長編輯:解決看到評論。

+0

解決了:SizerAndFit是問題,我刪除了Fit並且一切都很好用。 – lostdev

回答

2

我想我想通了。像往常一樣,當添加或刪除窗口小部件時,您需要在父窗口上調用Layout,在這種情況下,這是獲取新的子窗口的滾動窗格。您還必須調用SetupScrolling(),以便它可以重新計算有多少空間以及是否需要滾動條。下面是一個適用於Windows的示例:

import wx 
import wx.lib.scrolledpanel as scrolled 

######################################################################## 
class MyForm(wx.Frame): 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial", size=(200,500)) 

     # Add a panel so it looks the correct on all platforms 
     self.panel = wx.Panel(self, wx.ID_ANY) 

     # -------------------- 
     # Scrolled panel stuff 
     self.scrolled_panel = scrolled.ScrolledPanel(self.panel, -1, 
           style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="panel1") 
     self.scrolled_panel.SetAutoLayout(1) 
     self.scrolled_panel.SetupScrolling() 

     words = "A Quick Brown Insane Fox Jumped Over the Fence and Ziplined to Cover".split() 
     self.spSizer = wx.BoxSizer(wx.VERTICAL) 
     for word in words: 
      text = wx.TextCtrl(self.scrolled_panel, value=word) 
      self.spSizer.Add(text) 
     self.scrolled_panel.SetSizer(self.spSizer) 
     # -------------------- 

     btn = wx.Button(self.panel, label="Add Widget") 
     btn.Bind(wx.EVT_BUTTON, self.onAdd) 

     panelSizer = wx.BoxSizer(wx.VERTICAL) 
     panelSizer.AddSpacer(50) 
     panelSizer.Add(self.scrolled_panel, 1, wx.EXPAND) 
     panelSizer.Add(btn) 
     self.panel.SetSizer(panelSizer) 

    #---------------------------------------------------------------------- 
    def onAdd(self, event): 
     """""" 
     print "in onAdd" 
     new_text = wx.TextCtrl(self.scrolled_panel, value="New Text") 
     self.spSizer.Add(new_text) 
     self.scrolled_panel.Layout() 
     self.scrolled_panel.SetupScrolling() 

# Run the program 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyForm().Show() 
    app.MainLoop() 
+0

我從來沒有想過,我需要在添加小部件後再次調用'SetupScrolling'! (我的經驗與Windows和MacOS的經驗是一樣的,但它對我而言沒有Linux上的額外步驟) – starfry

+0

是的。圖形用戶界面的工作通常最終會導致試驗和錯誤,讓它按照你想要的方式工作。 –