2

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

4

0 回答 0