wxPython使用scrolledPanel调整大小有时会破坏按钮的绘制

时间:2012-09-28 19:56:57

标签: python resize wxpython repaint

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

0 个答案:

没有答案