def _bindfuncs(self):
# wx classes throw exception if getmember is applied to the instance (self)
methods = inspect.getmembers(self.__class__, inspect.ismethod)
for mname, method in methods:
dynbindings = getattr(method, '_dynbinding', None)
if dynbindings is None:
continue
for dynbinding in dynbindings:
if dynbinding:
eventname, widgetprefix, widgetname = dynbinding
event = getattr(wx, eventname, None)
if event is None:
print 'Method', mname
print 'Failed to find eventname', eventname
continue
name = 'm_' + widgetprefix.lower() + widgetname.lower()
widget = None
for attrname in dir(self):
if attrname.lower() == name:
widget = getattr(self, attrname)
break
if not widget:
print 'Method', mname
print 'Failed to find widget', name
continue
boundmethod = method.__get__(self, self.__class__)
self._dynbindings.append((widget, event, boundmethod))
if event in [wx.EVT_MENU, wx.EVT_TOOL]:
self.Bind(event, boundmethod, id=widget.GetId())
elif event in [wx.EVT_SIZE]:
self.Bind(event, boundmethod)
else:
widget.Bind(event, boundmethod)
评论列表
文章目录