编辑:(小改变 - >第二个问题) 我创建了一个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而然后调用一个函数?
答案 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)