首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滚动时wx.ScrolledWindow不重绘

滚动时wx.ScrolledWindow不重绘
EN

Stack Overflow用户
提问于 2011-02-08 17:43:24
回答 1查看 1.4K关注 0票数 1

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

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

示例:

创建上述示例的代码:

代码语言:javascript
复制
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_SCROLLWIN事件,然后显式地重新绘制窗口,但是我尝试这样做的尝试失败了,因为调用self.Refresh()并没有导致wx.ScrolledWindow的内部重新绘制。

无论如何,在我看来,wx.ScrolledWindow对象的全部意义在于它应该在滚动时处理自身的重绘。

我做错了什么?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-08 23:09:37

我认为问题在于您的wx.StaticText小部件是SaveEdFrame的子项,而不是ScrolledWindow的子项。当您滚动ScrolledWindow时,它会在它们上面重新绘制。尝试:

代码语言:javascript
复制
 headerLabel = wx.StaticText(self.scroll, -1, "TestStr %s" % key)
 self.mainSizer.Add(headerLabel)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4931485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档