У меня есть небольшое приложение, над которым я работаю с 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()
I 'Я копался в wxDocs, и мне кажется, что одним из решений было бы создать подкласс wx.ScrolledWindow
, вручную перехватить wx.EVT_SCROLLWIN
события и затем явно перерисовать окно, но мои попытки сделать это потерпели неудачу при вызове self.Refresh()
.не заставляет внутреннюю часть wx.ScrolledWindow
перерисовываться.
В любом случае, мне кажется, что весь смысл wx.ScrolledWindow
объекта в том, что он должен обрабатывать перерисовку при прокрутке.
Что я делаю не так?
Платформа W7-x64, 32-битная версия Python 2.7, wxPython 2.8.11.0