Python wx.ScrolledWindow在滚动时未重新绘制

Python wx.ScrolledWindow在滚动时未重新绘制,python,windows-7,wxpython,wxwidgets,Python,Windows 7,Wxpython,Wxwidgets,我有一个小应用程序,我正在与wxPython合作 我有一个使用wx的滚动窗口。滚动窗口。滚动时,它似乎拒绝重新绘制内容 示例: 创建上述示例的代码: import wx class SaveEdFrame(wx.Frame): def __init__(self, *args, **kwds): kwds["style"] = wx.DEFAULT_FRAME_STYLE|wx.EXPAND wx.Frame.__init__(self, *args

我有一个小应用程序,我正在与wxPython合作

我有一个使用
wx的滚动窗口。滚动窗口
。滚动时,它似乎拒绝重新绘制内容

示例:

创建上述示例的代码:

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
子类化,手动捕获
wx.EVT\u SCROLLWIN
事件,然后显式地重新绘制窗口,但在调用
self.Refresh()时,我的尝试失败了
未导致
wx.scrolled窗口的内部重新喷漆

无论如何,在我看来,
wx.ScrolledWindow
对象的全部要点是,它应该在滚动时处理重新绘制自己

我做错了什么


平台是W7-x64,python 2.7 32位,wxPython 2.8.11.0

我认为问题在于wx.StaticText小部件是SaveEdFrame的子部件,而不是Scrolled窗口。滚动时,滚动窗口将在其上重新绘制。尝试:

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

是的。这就解决了问题。还有:Doh!我想我把滚动窗口看作是一个尺寸器,而不是一个面板。