Это один простой способ добиться того, чего вы хотите, привязав события мыши к изображению.
Убедитесь, что изображение по существу имеет фиксированный размер, или вам придется начинать вычисление позиций.
import wx
class Example(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Mouse Control')
self.panel1 = wx.Panel(self)
self.panel2 = wx.Panel(self)
self.panel3 = wx.Panel(self)
self.aBitmap = wx.Image(name = "image_button.png").ConvertToBitmap()
self.bm = wx.StaticBitmap(self.panel2, -1, self.aBitmap)
self.bm.Bind(wx.EVT_LEFT_DOWN, self.onClick)
self.bm.Bind(wx.EVT_MOTION, self.onAccess)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(self.panel1,0)
vbox.Add(self.panel2,0)
vbox.Add(self.panel3,0)
self.panel1.SetMinSize(self.bm.GetSize())
self.panel2.SetMinSize(self.bm.GetSize())
self.panel3.SetMinSize(self.bm.GetSize())
self.panel1.SetBackgroundColour("blue")
self.panel3.SetBackgroundColour("blue")
self.SetSizerAndFit(vbox)
self.Show()
def onClick(self, event):
x,y = event.GetPosition()
if y > 25 and y < 50:
if x > 30 and x < 170:
wx.MessageBox("Contact", "Contact Header")
elif x > 800 and x < 860:
wx.MessageBox("Exit", "Exit Header")
else:
event.Skip()
def onAccess(self, event):
x,y = event.GetPosition()
if y > 25 and y < 50:
if x > 30 and x < 170:
self.SetCursor(wx.Cursor(wx.CURSOR_HAND))
elif x > 800 and x < 860:
self.SetCursor(wx.Cursor(wx.CURSOR_HAND))
else:
self.SetCursor(wx.Cursor(wx.CURSOR_DEFAULT))
else:
self.SetCursor(wx.Cursor(wx.CURSOR_DEFAULT))
event.Skip()
if __name__ == '__main__':
app = wx.App()
Example()
app.MainLoop()
Этот код указывает, что вы превысили hotspot
(свяжитесь с нами, выйдите), изменив курсор.