2010-08-05 7 views
0

J'ai un Panel sur lequel j'affiche un StaticBitmap initialisé avec un identifiant de 2. Lorsque je lie un événement souris à l'image et appelle GetId() sur l'événement, il renvoie -202. Pourquoi?wxPython: ID de fenêtre et d'événement

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

Il n'y a pas de problème avec votre code, je l'ai juste couru, votre gestionnaire imprime 2 – volting

+0

@volting: Je l'ai exécuté aussi et vous avez raison. – FogleBird

+0

Quelle plateforme et quelles versions de Python/wxPython? – FogleBird

Répondre

0

Vous imprimez l'ID de l'événement, pas l'ID du bitmap.

Essayez print event.GetEventObject().GetId()

GetEventObject renvoie le widget associé à l'événement, dans ce cas, le StaticBitmap. FWIW, je n'ai jamais eu besoin d'assigner des ID à des widgets, et vous ne devriez probablement pas en avoir besoin non plus.

Modifier: J'ai vu d'autres questions que vous avez posées et voici ce que je recommande, surtout si GetEventObject renvoie le parent à la place (je suis très surpris si cela est vrai, vous devriez vérifier):

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

à la fois event.GetId() et event.GetEventObject () .GetId() retournera l'identifiant des bitmaps http://www.wxpython.org/docs/api/wx.Event-class.html#GetId – volting

+0

@volting: Ce n'est pas ainsi que j'interprète la documentation à laquelle vous avez lié. – FogleBird

+0

Oui, j'ai peut-être mal interprété le document lié, je ne peux pas trouver quelque chose qui supporte mieux ma déclaration, mais l'expérience personnelle me dit qu'ils (event.GetId() et event.GetEventObject(). GetId()) produisent le même résultat, essayez-le par vous-même – volting