我有一个使用 ScrolledPanel 的 wxPython 程序,它在某些调整大小时做了一些非常奇怪的事情。如果您稍微拖动调整大小,其中一个按钮将开始看起来混乱。
之前: http ://s7.postimage.org/stoc27517/Good_Window.png
之后: http ://s9.postimage.org/s2apf38m7/Bad_Window.png
这是代码:
import wx
import wx.lib.scrolledpanel as scrolled
class TestApp(wx.Frame):
def __init__(self, *args, **kwargs):
super(TestApp,self).__init__(*args,**kwargs)
self.setupGUI()
def setupGUI(self):
#Fires on window resize
self.Bind(wx.EVT_SIZE, self.OnSize)
self.box = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(self.box)
self.scrolling_window = scrolled.ScrolledPanel( self )
self.scrolling_window.SetAutoLayout(1)
self.scrolling_window.SetupScrolling()
self.gb = wx.GridBagSizer(5,5)
self.scrolling_window.SetSizer(self.gb)
self.btnOne = wx.Button(self.scrolling_window,label='One')
self.btnTwo = wx.Button(self.scrolling_window,label='Two')
self.gb.Add(self.btnOne, pos=(0,0), flag=wx.EXPAND)
self.gb.Add(self.btnTwo, pos=(1,1), flag=wx.ALIGN_BOTTOM)
self.gb.AddGrowableCol(0)
self.gb.AddGrowableRow(1)
self.box.Add(self.scrolling_window,1,wx.EXPAND)
self.Show(True)
def OnSize(self, e):
#This refresh shouldn't be necessary
#self.Refresh()
#Pass event up the chain so window still resizes
e.Skip()
if __name__ == '__main__':
app = wx.App(redirect=False)
TestApp(None)
app.MainLoop()
我可以防止这种行为的唯一方法是取消注释 OnSize 方法中的 self.Refresh() 。这基本上会在每个窗口调整大小时强制重新绘制。但我不认为这应该是必要的。这是一个错误,还是我做错了什么?