2009-02-23 86 views
0

好的,所以我想在窗口中显示一系列窗口并且可以滚动整个窗口。我一直在寻找the wxWidgets documentation以及来自t'internet各种来源的一些例子。多数那些似乎暗示着一个wx.ScrolledWindow应该工作,如果我只是通过它的大小测定器嵌套组(?):使用wxPython创建可滚动区域的最简单方法是什么?

最自动化和最新的方法是简单地让施胶剂确定滚动area.This当您使用wxWindow :: SetSizer将内部sizer设置为wxScrolledWindow时,现在是默认设置。滚动区域将被设置为sizer所要求的大小,滚动条将根据它们的需要和由wxScrolledWindow :: SetScrollRate设置的滚动增量分配给每个方向。

...但我见过的所有例子似乎都使用列出的旧方法作为实现滚动的方式。我有一些基本工作,但只要你开始滚动你失去了子窗口:

import wx 

class MyCustomWindow(wx.Window): 
    def __init__(self, parent): 
     wx.Window.__init__(self, parent) 
     self.Bind(wx.EVT_PAINT, self.OnPaint) 
     self.SetSize((50,50)) 

    def OnPaint(self, event): 
     dc = wx.BufferedPaintDC(self) 
     dc.SetPen(wx.Pen('blue', 2)) 
     dc.SetBrush(wx.Brush('blue')) 
     (width, height)=self.GetSizeTuple() 
     dc.DrawRoundedRectangle(0, 0,width, height, 8) 

class TestFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, -1) 

     self.Bind(wx.EVT_SIZE, self.OnSize) 

     self.scrolling_window = wx.ScrolledWindow(self) 
     self.scrolling_window.SetScrollRate(1,1) 
     self.scrolling_window.EnableScrolling(True,True) 
     self.sizer_container = wx.BoxSizer(wx.VERTICAL) 
     self.sizer = wx.BoxSizer(wx.HORIZONTAL) 
     self.sizer_container.Add(self.sizer,1,wx.CENTER,wx.EXPAND) 
     self.child_windows = [] 
     for i in range(0,50): 
      wind = MyCustomWindow(self.scrolling_window) 
      self.sizer.Add(wind, 0, wx.CENTER|wx.ALL, 5) 
      self.child_windows.append(wind) 

     self.scrolling_window.SetSizer(self.sizer_container) 

    def OnSize(self, event): 
     self.scrolling_window.SetSize(self.GetClientSize()) 

if __name__=='__main__': 
    app = wx.PySimpleApp() 
    f = TestFrame() 
    f.Show() 
    app.MainLoop() 
+0

如果您使用wx.lib.scrolledpanel而不是有更好的运气?有关示例,请参见wxPython演示。 (它在“更多窗口/控件”下) – 2009-02-23 23:45:40

回答

0

哎呀..原来我竟被创建我的子窗口:

wind = MyCustomWindow(self) 

应:

wind = MyCustomWindow(self.scrolling_window) 

..这意味着子窗口正在等待顶层窗口(帧)被重新绘制,而不是听滚动窗口。改变这一切使它工作起来奇妙:)

相关问题