2009-02-23 4 views
0

Хорошо, поэтому я хочу отобразить серию окон в окнах и прокрутить весь пакет. Я охотился за the wxWidgets documentation и загрузкой примеров из разных источников на t'internet. Большинство из них, кажется, подразумевает, что wx.ScrolledWindow должен работать, если я просто передать его вложенную группу дробилок (?):Самый простой способ создать прокручиваемую область с помощью wxPython?

Самого автоматический и новейший способ, чтобы просто позволить клеильным определить прокрутку area.This теперь используется по умолчанию, когда вы устанавливаете внутренний sizer в wxScrolledWindow с wxWindow :: SetSizer. Область прокрутки будет установлена ​​в размере, запрашиваемом параметром 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 для примера. (это под «Больше Windows/Controls») –

+0

Просто попробовал это, и это не имело значения. –

ответ

0

Упс .. Оказывается, я создавал свои дочерние окна плохо:

wind = MyCustomWindow(self) 

должны быть :

wind = MyCustomWindow(self.scrolling_window) 

..which означает дочерние окна ждали окна верхнего уровня (кадр), чтобы быть перерисованы вместо прослушивания окна прокрутки. Изменение, которое заставляет все это работать чудесно :)

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