Thanks to Robin and everyone.
The following works. With no menubar.
(I still don't understand the EVT_MENU, seems like I
should be binding the event to a frame level command
event of some kind. But that's ok, this is clean.
kfl = [
(s.dof1clear ,'n',wx.WXK_F1,),
(s.dof2search ,'n',wx.WXK_F2,),
(s.dof3fixline,'n',wx.WXK_F3,),
(s.dof4delline,'n',wx.WXK_F4,),
(s.dof5push,'n',wx.WXK_F5,),
(s.dof6pop,'n',wx.WXK_F6,),
..... Etc.....
(s.pagedown,'n',wx.WXK_PAGEDOWN,),
(s.pageup,'n',wx.WXK_PAGEUP,),
]
acclist = []
for k in kfl:
id1 = wx.NewId()
s.f.Bind(wx.EVT_MENU, k[0], id=id1)
if k[1] == 'n': typ = wx.ACCEL_NORMAL
elif k[1] == 'a': typ = wx.ACCEL_ALT
acclist.append( (typ,k[2],id1) )
atbl = wx.AcceleratorTable(acclist)
s.f.SetAcceleratorTable(atbl) # s.f is the FRAME