我有一个使用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()。这实际上会强制重新调整每个窗口的大小。但我不认为这是必要的。这是一个错误,还是我做错了什么?