我有一个面板上有几个图像,每个图像绑定到相同的事件处理程序。我如何确定从事件处理程序中点击哪个图像?我尝试使用Event.GetEventObject(),但它返回父面板,而不是单击的图像。wxPython:如何确定事件源
下面是一些示例代码:
import math
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id=-1,title="",pos=wx.DefaultPosition,
size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE,
name="frame"):
wx.Frame.__init__(self,parent,id,title,pos,size,style,name)
self.panel = wx.ScrolledWindow(self,wx.ID_ANY)
self.panel.SetScrollbars(1,1,1,1)
num = 4
cols = 3
rows = int(math.ceil(num/3.0))
sizer = wx.GridSizer(rows=rows,cols=cols)
filenames = []
for i in range(num):
filenames.append("img"+str(i)+".png")
for fn in filenames:
img = wx.Image(fn,wx.BITMAP_TYPE_ANY)
img2 = wx.BitmapFromImage(img)
img3 = wx.StaticBitmap(self.panel,wx.ID_ANY,img2)
sizer.Add(img3)
img3.Bind(wx.EVT_LEFT_DCLICK,self.OnDClick)
self.panel.SetSizer(sizer)
self.Fit()
def OnDClick(self, event):
print event.GetEventObject()
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyFrame(None)
frame.Show()
app.MainLoop()
我在上面发布的代码上通过将一个计数器作为id参数传递给staticBitmap构造函数(0到n-1)来试用此功能。然而,对事件调用GetId()总是返回-202,由于某种原因... – Johnny 2010-08-05 00:05:17
那么你可以这样做的两种方式预先为你的图像创建一个Id列表(并在实例化你的staticBitmaps时使用它们),然后只是比较它们......或者将你的图像对象放入一个列表中,然后比较那些Ids,你也可以在它们上面调用GetId(),如果你想要一个例子,我们再添加它......它可能更容易遵循。 – volting 2010-08-05 00:12:12
对不起,我只是注意到,我有点想念你的评论。如果你得到-202这意味着你做错了什么..如果你真的使用计数器..那么你应该得到他们的数字返回与GetId()ID为-202表明你通过随机Id – volting 2010-08-05 00:36:53