我正在使用 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
最佳答案
我认为问题在于您的 wx.StaticText 小部件是 SaveEdFrame 的子级,而不是 ScrolledWindow。当您滚动时,ScrolledWindow 将在它们上面重新绘制。尝试:
headerLabel = wx.StaticText(self.scroll, -1, "TestStr %s" % key)
self.mainSizer.Add(headerLabel)
关于python - wx.ScrolledWindow 滚动时不重新绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4931485/