如何在wxPython StaticBitmap上接收鼠标事件?

问题描述

我一直试图在wxpython中的wx.StaticBitmap对象上接收鼠标事件。进行得不好。我在MacOS上使用wxpython 4.1.0和wxWidgets 3.1.4。我什至使用检查工具来调查将哪些事件发送到StaticBitmap对象。看来在StaticBitmap对象上完全没有鼠标事件。

这是一些演示此问题的示例代码

import wx

def OnFrameClicked(e):
    print("Frame received click event")
    print(e.GetPosition())
    e.Skip()

def OnImageClicked(e):
    print("Image received click event")
    print(e.GetPosition())

app = wx.App(False)
frame = wx.Frame(None,wx.ID_ANY,"wxStaticBitmap Experiment")
frame.Bind(wx.EVT_LEFT_DOWN,OnFrameClicked)
bmp = wx.Image('100x100.png',wx.BITMAP_TYPE_ANY).ConvertToBitmap()
image = wx.StaticBitmap(frame,bitmap=bmp)
image.Bind(wx.EVT_LEFT_DOWN,OnImageClicked)
frame.Show(True)
# uncomment the next 2 lines to enable detailed inspection
#import wx.lib.inspection
#wx.lib.inspection.inspectionTool().Show()
print(wx.version())
app.MainLoop()

这里也包含示例png图像的github项目:wxpython-staticbitmap

单击StaticBitmap对象时如何获得鼠标事件?

解决方法

wx.StaticBitmap可能不是Mac上的“真实”窗口小部件,而是由操作系统简单地绘制在屏幕上。如果需要这些事件,建议您在wx.lib.statbmp中研究wx.StaticBitmap的通用实现。