2010-08-05 66 views
0

我有一个面板,我显示一个StaticBitmap初始化为2的id。当我将鼠标事件绑定到图像并在事件上调用GetId()时,它返回-202。为什么?wxPython:窗口和事件ID的

import wx 

class MyFrame(wx.Frame): 

    def __init__(self, parent, id=-1): 

     wx.Frame.__init__(self,parent,id) 

     self.panel = wx.Panel(self,wx.ID_ANY) 

     img = wx.Image("img1.png",wx.BITMAP_TYPE_ANY) 
     img2 = wx.StaticBitmap(self.panel,2,wx.BitmapFromImage(img)) 
     print img2.GetId() # prints 2 

     img2.Bind(wx.EVT_LEFT_DOWN,self.OnDClick) 

    def OnDClick(self, event): 

     print event.GetId() # prints -202 

if __name__ == "__main__": 

    app = wx.PySimpleApp() 
    frame = MyFrame(None) 
    frame.Show() 
    app.MainLoop() 
+1

你的代码没有问题,我只是运行它,你的处理程序打印2 – volting 2010-08-05 11:09:48

+0

@volting:我也运行它,你是对的。 – FogleBird 2010-08-05 11:56:25

+0

什么平台和Python/wxPython版本? – FogleBird 2010-08-05 11:58:48

回答

0

您正在打印事件的ID,而不是位图的ID。

尝试print event.GetEventObject().GetId()

GetEventObject收益与事件相关联的部件,在这种情况下,StaticBitmap

FWIW,我从来不需要将ID分配给任何小部件,而且您可能也不需要。

编辑:我看到你问了一些其他的问题,这就是我会建议,特别是如果GetEventObject是不是返回父(我这是不是真的很惊讶,你应该仔细检查):

import functools 

widget1.Bind(wx.EVT_LEFT_DOWN, functools.partial(self.on_left_down, widget=widget1)) 
widget2.Bind(wx.EVT_LEFT_DOWN, functools.partial(self.on_left_down, widget=widget2)) 
# or the above could be in a loop, creating lots of widgets 

def on_left_down(self, event, widget): 
    # widget is the one that was clicked 
    # event is still the wx event 
    # handle the event here... 
+0

event.GetId()和event.GetEventObject( ).GetId()将返回位图ID http://www.wxpython.org/docs/api/wx.Event-class.html#GetId – volting 2010-08-05 11:19:21

+0

@volting:这不是我解释链接到的文档。 – FogleBird 2010-08-05 11:50:05

+0

是的,我可能误解了链接的文档,我似乎找不到更好的支持我的声明,但个人经验告诉我他们(event.GetId()和event.GetEventObject().getId())产生相同的结果,自己尝试一下 – volting 2010-08-05 12:01:54