wx.ScrolledWindow не перерисовывается при прокрутке - PullRequest
1 голос
/ 08 февраля 2011

У меня есть небольшое приложение, над которым я работаю с wxPython.

У меня есть окно с прокруткой, используя wx.ScrolledWindow.Кажется, он отказывается перерисовывать содержимое при прокрутке.

Пример:
Yes, my window-manager color-scheme is Pink. What of it?

Код, созданный выше:

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()

I 'Я копался в wxDocs, и мне кажется, что одним из решений было бы создать подкласс wx.ScrolledWindow, вручную перехватить wx.EVT_SCROLLWIN события и затем явно перерисовать окно, но мои попытки сделать это потерпели неудачу при вызове self.Refresh().не заставляет внутреннюю часть wx.ScrolledWindow перерисовываться.

В любом случае, мне кажется, что весь смысл wx.ScrolledWindow объекта в том, что он должен обрабатывать перерисовку при прокрутке.

Что я делаю не так?

Платформа W7-x64, 32-битная версия Python 2.7, wxPython 2.8.11.0

1 Ответ

2 голосов
/ 08 февраля 2011

Я думаю, что проблема в том, что ваши виджеты wx.StaticText являются дочерними элементами SaveEdFrame, а не ScrolledWindow.ScrolledWindow перерисовывается над ними при прокрутке.Попробуйте:

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