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