【问题标题】:wx.ScrolledWindow not repainting when scrolledwx.ScrolledWindow 滚动时不重新绘制
【发布时间】:2011-02-08 09:43:24
【问题描述】:

我正在使用 wxPython 开发一个小应用程序。

我有一个使用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 子类化,手动捕获wx.EVT_SCROLLWIN 事件,然后显式重绘窗口,但是当我尝试这样做时失败了调用self.Refresh() 不会导致wx.ScrolledWindow 的内部重新绘制。

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

我做错了什么?

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

【问题讨论】:

    标签: python windows-7 wxpython wxwidgets


    【解决方案1】:

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

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

    【讨论】:

    • 是的。那解决了它。另外:Doh!
    • 我想我认为 ScrolledWindow 是一个 Sizer,而不是一个 Panel。
    猜你喜欢
    • 2023-04-10
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    相关资源
    最近更新 更多