2011-01-05 6 views
0

я не знаю, почему следующий код не работает, пожалуйста, помогите мне:Почему ScrolledPanel в wxpython не работает таким образом?

import wx 
import wx.lib.scrolledpanel as scrolled 

class TaskFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, parent = None, id = -1, title="ScrolledPanel", size = (500, 600)) 
     MainPanel = wx.Panel(self) 
     NewPanel = scrolled.ScrolledPanel(parent = MainPanel, pos = (100, 100), size = (300, 200), id = -1, style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="panel") 

     self.Button = wx.Button(parent = NewPanel, id = -1, label="Log", pos=(500, 30), size=(50, 20)) 
     NewPanel.SetupScrolling() 


class TaskApp(wx.App): 
    def OnInit(self): 
     self.frame = TaskFrame() 
     self.frame.Show() 
     self.SetTopWindow(self.frame) 
     return True 

def main(): 
    App = TaskApp(redirect = False) 
    App.MainLoop() 

if __name__ == "__main__": 
    main() 

Кнопка входа должна быть в NewPanel и NewPanel должны иметь возможность прокрутки, но это не так, в чем проблема?

ответ

3

Попробуйте использовать сизер. Вы должны поместить объект больше, чем ScrolledPanel внутри него, чтобы активировать прокрутку (насколько я знаю), так что это должно делать то, что я думаю, что вы пытаетесь сделать:

class TaskFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, parent = None, id = -1, title="ScrolledPanel", size = (500, 600)) 
     MainPanel = wx.Panel(self) 
     NewPanel = scrolled.ScrolledPanel(parent = MainPanel, pos = (100, 100), size = (300, 200), id = -1, style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="panel") 

     PanelSizer = wx.BoxSizer() 
     InsidePanel = wx.Panel(NewPanel) 
     self.Button = wx.Button(parent=InsidePanel, id = -1, label="Log", pos=(500, 30), size=(50, 20)) 
     PanelSizer.Add(InsidePanel, proportion=1) 

     NewPanel.SetSizer(PanelSizer) 
     NewPanel.SetupScrolling() 
+0

на самом деле, я считаю, что вы должны использовать sizer. Документы говорят: «Предполагается, что ScrolledPanel будет иметь sizer, поскольку он используется для вычисления минимального виртуального размера панели и т. Д.» – Mark

+0

Большое спасибо, ребята! – Shane

Смежные вопросы