wxPython:更改按钮图像

wxPython: Change Button Image

我想在 wxPython 中更改按钮图像。我可以隐藏和删除按钮,但是当我尝试再次将按钮添加到同一位置时,它出现在错误的位置。我错过了什么?

详情:我为 wx.Panel 创建了一个 class。 class 有一个构造函数。 class 有两个按钮。当您按下第一个按钮时,第二个按钮被隐藏,然后从 sizer 中移除。当按下第一个按钮时,调用 "clicked()" 函数。 "clicked()" 函数首先隐藏要移除的按钮,然后将其从sizer 中移除。当 "clicked()" 函数尝试将另一个按钮添加到与第二个按钮相同的位置时,新按钮会出现在用户界面的顶部。

我希望将新按钮放置在与旧按钮相同的位置。我该怎么做?

class Panel(wx.Panel):

    def __init__(self, parent):

        super(Panel, self).__init__(parent)

        self.sizer = wx.GridBagSizer(11, 14)

        self.button01 = wx.Button(self, label="01")
        self.sizer.Add(self.button01, pos=(2, 0))

        self.Bind(wx.EVT_BUTTON, self.clicked, self.button01)

        self.pic = wx.Bitmap("light.jpg", wx.BITMAP_TYPE_ANY)
        self.buttonpic = wx.BitmapButton(self, -1, self.pic)
        self.sizer.Add(self.buttonpic, pos=(3, 1), flag=wx.LEFT, border=10)
        self.sizer.AddGrowableCol(2)    
        self.SetSizer(self.sizer)
        self.sizer.Fit(self)


    def clicked(self, event):

        self.sizer.Hide(   2 )
        self.sizer.Remove( 2 )

        self.pic = wx.Bitmap("dark.jpg", wx.BITMAP_TYPE_ANY)
        self.buttonpic = wx.BitmapButton(self, -1, self.pic)
        self.sizer.Add(self.buttonpic, pos=(3, 1), flag=wx.LEFT, border=10)

        event.Skip()

编辑: 我不得不从原来的代码中删除了很多代码,这样 Whosebug 才能接受我的问题,所以给 Hide() 和 Remove( ) 函数在此示例中可能不正确,但按钮的隐藏和删除在原始代码中没有错误。

无需创建新的小部件,只需调用现有按钮的 SetBitmap 方法即可。

对于那些确实需要新小部件的时候,一定要在之后调用 sizer 的 Layout 方法,以便 sizer 重新布局并将该小部件移动到位。