wx.python GenBitmapButton SetBackgroundColour仅在第一次更改

时间:2017-08-26 03:28:24

标签: python button wxpython

使用wx.python还是新手,所以如果我做错了,请告诉我。我正在尝试创建一个伪Bitmap切换按钮。我有2个或更多的Bitmap按钮,初始背景为蓝色,当点击一个按钮时,它的背景应该变为绿色。当发生这种情况时,所有其他按钮应该变回蓝色,但它们保持绿色。有任何想法吗?

我在下面重新创建了我的问题。

使用了BMP图像,但图像并不重要:enter image description here

*编辑:GenBitmapToggleButton现在突然决定工作,所以我将使用它。我打算放弃它,因为它仍然是一个奇怪的错误,因为它似乎在Linux上运行但在Windows上没有。

import wx
import wx.lib.buttons as buttons

class MainFrame(wx.Frame):

#----------------------------------------------------------------------
    def __init__(self):

        wx.Frame.__init__(self, None, title="Test",size=(800,800))
        panel = wx.Panel(self,-1,name="panel")  

        bmp = wx.Bitmap("Discord.bmp", wx.BITMAP_TYPE_ANY)

        self.Button1 = buttons.GenBitmapButton(panel,bitmap=bmp,pos=(200,400),size=(bmp.GetWidth()+10, bmp.GetHeight()+10),style=wx.NO_BORDER,name="Button1")
        self.Button1.SetBackgroundColour("Blue")

        self.Button2 = buttons.GenBitmapButton(panel,bitmap=bmp,pos=(600,400),size=(bmp.GetWidth()+10, bmp.GetHeight()+10),style=wx.NO_BORDER,name="Button2")
        self.Button2.SetBackgroundColour("Blue")
        self.Bind(wx.EVT_BUTTON, self.OnClick)

        self.BitmapButtons = [self.Button1,self.Button2]
        self.Show()

    def OnClick(self,event):
        parent = event.GetEventObject().GetParent().GetName()
        name = event.GetEventObject().GetName()

        if parent == "panel":
            for i in range(0,len(self.BitmapButtons)):
                buttonName = self.BitmapButtons[i].GetName()
                if buttonName == name:
                    self.BitmapButtons[i].SetBackgroundColour("Green")
                else:
                    self.BitmapButtons[i].SetBackgroundColour("Blue")


#----------------------------------------------------------------------
if __name__ == "__main__":
      app = wx.App(False)
      frame = MainFrame()
      app.MainLoop()

1 个答案:

答案 0 :(得分:1)

这是一个选项,它使用按钮的state和多个图像来实现您正在做的事情,我认为这应该是首选的方法。
在这里,我只使用了2张图片,但你可以使用4张,每张state一张 正常状态
聚焦状态
选定的国家
和禁用状态

import wx
import wx.lib.buttons as buttons

class MainFrame(wx.Frame):

#----------------------------------------------------------------------
    def __init__(self):

        wx.Frame.__init__(self, None, title="Test",size=(800,800))
        panel = wx.Panel(self,-1,name="panel")

        bmp = wx.Bitmap("Discord.png", wx.BITMAP_TYPE_ANY)
        bmp2 = wx.Bitmap("Discord1.png", wx.BITMAP_TYPE_ANY)

        self.Button1 = buttons.GenBitmapButton(panel,bitmap=bmp,pos=(100,100),name="Button1")
        self.Button2 = buttons.GenBitmapButton(panel,bitmap=bmp,pos=(200,100),name="Button2")
        self.Button3 = buttons.GenBitmapButton(panel,bitmap=bmp,pos=(300,100),name="Button3")
        self.BitmapButtons = [self.Button1,self.Button2,self.Button3]
        for i in range(0,len(self.BitmapButtons)):
            self.BitmapButtons[i].SetBitmapLabel(bmp)
            self.BitmapButtons[i].SetBitmapFocus(bmp2)
            self.BitmapButtons[i].SetBitmapSelected(bmp2)
        self.Show()
#----------------------------------------------------------------------
if __name__ == "__main__":
      app = wx.App(False)
      frame = MainFrame()
      app.MainLoop()

enter image description here