wxPython:更改按钮图像

问题描述 投票:0回答:1

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

详细信息:我为wx.Panel创建一个类。该类具有构造函数。该班有两个按钮。当您按下第一个按钮时,第二个按钮被隐藏,然后从尺寸调整器中删除。当按下第一个按钮时,将调用“ clicked()”函数。 “ clicked()”函数首先隐藏要删除的按钮,然后将其从大小调整器中删除。当“ 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()

Edit:我必须从原始代码中删除很多代码,以便StackOverflow可以接受我的问题,因此在此示例中,给Hide()和Remove()函数提供的整数可能不正确,但是按钮的隐藏和删除操作在原始代码中没有错误。

python image button wxpython wxpython-phoenix
1个回答
0
投票

而不是创建新的小部件,只需调用现有按钮的SetBitmap方法。

对于那些确实需要新的窗口小部件的时间,请确保以后再调用sizer的Layout方法,以便sizer将重做布局并将该窗口小部件移到适当位置。

© www.soinside.com 2019 - 2024. All rights reserved.