2011-02-08 142 views
1

我有一個小應用程序,我正在使用wxPython。wx.ScrolledWindow滾動時不刷新

我有一個使用wx.ScrolledWindow的滾動窗口。它在滾動時似乎拒絕重新繪製內容。

例子:

import wx 


class SaveEdFrame(wx.Frame): 
    def __init__(self, *args, **kwds): 
     kwds["style"] = wx.DEFAULT_FRAME_STYLE|wx.EXPAND 
     wx.Frame.__init__(self, *args, **kwds) 

     self.__do_layout() 

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


    def __mainSizer(self): 
     self.mainSizer = wx.BoxSizer(wx.VERTICAL) 

     for key in xrange(30): 
      self.headerLabel = wx.StaticText(self, -1, "TestStr %s" % key) 
      self.mainSizer.Add(self.headerLabel) 
     return self.mainSizer 


    def __do_layout(self): 
     ## begin wxGlade: SaveEdFrame.__do_layout 

     self.scroll = wx.ScrolledWindow(self, style=wx.FULL_REPAINT_ON_RESIZE) 
     self.scroll.SetScrollbars(1, 10, 1, 10) 
     self.scroll.SetSizer(self.__mainSizer()) 


    def onSize(self, event): 
     self.scroll.SetSize(self.GetClientSize()) 

     self.Refresh() 


if __name__ == "__main__": 
    app = wx.App(0) 

    mainFrame = SaveEdFrame(None) 
    app.SetTopWindow(mainFrame) 
    mainFrame.Show(True) 
    app.MainLoop() 

我已經通過wxDocs挖,而且在我看來,一個解決辦法是繼承wx.ScrolledWindow,手動:那上面的例子創建
Yes, my window-manager color-scheme is Pink. What of it?

代碼捕獲wx.EVT_SCROLLWIN事件,然後明確重新繪製該窗口,但在調用self.Refresh()時,我嘗試執行此操作失敗,但未造成重繪內部wx.ScrolledWindow

不管怎樣,在我看來,wx.ScrolledWindow對象的整個點在於它應該在滾動時處理自己的重繪。

我在做什麼錯?

平臺是W7-64,Python 2.7版32位,wxPython的2.8.11.0

回答

2

我認爲這個問題有你wx.StaticText部件是SaveEdFrame,而不是ScrolledWindow的孩子。當您滾動ScrolledWindow時,它們將被重新繪製。嘗試:

headerLabel = wx.StaticText(self.scroll, -1, "TestStr %s" % key) 
self.mainSizer.Add(headerLabel) 
+0

是的。這解決了它。另外:Doh! – 2011-02-09 06:47:56