更新wx.BitmapButton?

时间:2012-09-24 14:14:06

标签: wxpython

编辑:(小改变 - >第二个问题) 我创建了一个BitmapButton&一个TextCtrl。在TextCtrl中输入特定文本时,此按钮中的图片将会更改。这有效:

def create(self,event):
    self.textinput = wx.TextCtrl(self.panel, pos=(100,20))
    self.picture = wx.Image("pics\\default.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
    self.picturebutton = wx.BitmapButton(self.panel,-1,self.picture,pos=(100,50))
    self.textinput.Bind(wx.EVT_CHAR, self.changepic)

def changepic(self,event):
    if self.textinput.GetValue = 'test':
        self.picturebutton.Destroy()
        self.picture = wx.Image("pics\\new.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
        self.picturebutton = wx.BitmapButton(self.panel,-1,self.picture,pos=(100,50))
    event.Skip()

1。)我希望还有另一种方法,而不是摧毁&重建这个按钮。我试过了

self.picturebutton.Refresh()

self.picturebutton.Update()

而不是

    self.picturebutton.Destroy()
    self.picturebutton=wx.BitmapButton(self.panel,-1,self.picture,pos=(100,50))

但没有发生任何事。我该怎么办?

2。)看起来“changepic”首先被称为 然后我的TextCtrl接收了char。因为当我进入“测试”时,在按下另一个键之前没有任何反应。所以当我输入例如图片时会改变“种皮”。但是当“test”在TextCtrl中时它会改变。我怎么解决这个问题?是否有一个TextCtrl-Event,第一个将char放入TextCtrl而然后调用一个函数?

2 个答案:

答案 0 :(得分:0)

是的,无需重新创建控件来更改bmp。 刷新是您需要的,而不是在控件上调用它在控件父级上调用它。

self.Refresh()

使用EVT_TEXT事件时,您可以使用event.String获取控件的内容

此处您的代码包含这些更改

def create(self,event):
    self.textinput = wx.TextCtrl(self.panel, pos=(100,20))
    self.picture = wx.Image("pics\\default.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
    self.picturebutton = wx.BitmapButton(self.panel,-1,self.picture,pos=(100,50))
    self.textinput.Bind(wx.EVT_TEXT, self.changepic)

def changepic(self,event):
    if event.String = 'test':
        self.picture = wx.Image("pics\\new.bmp", wx.BITMAP_TYPE_BMP).ConvertToBitmap()
        self.picturebutton.SetBitmap(self.picture)
        self.Refresh()
    event.Skip()

答案 1 :(得分:0)

Yoriz使用self.Refresh()很棒,但我不得不使用

self.picturebutton.SetBitmapLabel(self.picture)

而不是

self.picturebutton.SetBitmap(self.picture)

让它发挥作用。 SetBitmap似乎不是有效的wx.BitmapButton方法。 (Python 2.7)