当鼠标悬停在小部件上方时,我想更新wx.StaticBitmap
的图片。 Baiscally,切换到黑白进行测试。
我的问题是,当调用self.image.SetBitmap(...)
时,图像将重新放置在我的窗口中,并且旧的图像仍停留在旧的位置。
另一个问题:是否可以在不加载新的黑白图像的情况下使我的图像黑白化?
这是我的代码:
import wx
class Example(wx.Frame):
def __init__(self, *args, **kw):
super(Example, self).__init__(*args, **kw)
self.InitUI()
def InitUI(self):
self.panel = wx.Panel(self)
hbox = wx.BoxSizer(wx.HORIZONTAL)
self.png = wx.Bitmap("TestButton.png")
self.png_bw = wx.Bitmap("TestButton_bw.png")
self.image = wx.StaticBitmap(self.panel, 1, self.png)
self.image.Bind(wx.EVT_ENTER_WINDOW, self.OnOver)
self.image.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
hbox.Add(self.image,1)
self.panel.SetSizer(hbox)
self.SetTitle('Button Test')
self.Centre()
def OnOver(self, event):
self.image.SetBitmap(self.png_bw)
def OnLeave(self, event):
self.image.SetBitmap(self.png)
def main():
app = wx.App()
ex = Example(None)
ex.Show()
app.MainLoop()
if __name__ == '__main__':
main()
答案 0 :(得分:1)
使用self.panel.Layout()
强制其安排物品
def OnOver(self, event):
self.image.SetBitmap(self.png_bw)
self.panel.Layout()
def OnLeave(self, event):
self.image.SetBitmap(self.png)
self.panel.Layout()
在Linux上,我必须将事件绑定到self.panel
而不是self.image
self.panel.Bind(wx.EVT_ENTER_WINDOW, self.OnOver)
self.panel.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
如果self.image.Bind()
在您的系统上可用,请不要更改它。
也许这只是Linux上的问题。
使用它我可以将项目放置在窗口中心
hbox.Add(self.image, 1, wx.EXPAND|wx.ALL)
使用wx.Image()
可以加载图像,并且图像具有转换为灰度的方法。
img = wx.Image("TestButton.png")
img_bw = img.ConvertToGreyscale(0.3, 0.3, 0.3)
self.png = wx.Bitmap(img)
self.png_bw = wx.Bitmap(img_bw)
文档:wx.Image