2

ScrolledPanel を使用する wxPython プログラムを持っていますが、いくつかのサイズ変更で非常に奇妙なことをしています。サイズ変更を少しドラッグすると、ボタンの 1 つがおかしくなり始めます。

前: 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