I have the following code:
class DataAccessFrame (wx.Frame):
menu_items = [('File', 'New Database', 'New Record', 'Open
Database...',
'Open Record...', 'Save Record', 'Save All Records',
'Close Record', 'Close Database'),
('Edit', 'Undo', 'Redo', 'Cut', 'Copy', 'Paste'),
('Help',)]
def __init__(self):
wx.Frame.__init __(self, None, title='Database Access Panel')
panel = wx.Panel(self)
self.create_men ubar()
# notebook = wx.Notebook(pan el)
# sizer = wx.BoxSizer()
# sizer.Add(noteb ook, 1, wx.EXPAND)
# panel.SetSizer( sizer)
def create_menubar( self):
menubar = wx.MenuBar()
for item in self.menu_items :
menu = wx.Menu()
menubar.Append( menu, item[0])
for subitem in item[1:]:
menu.Append(-1, subitem)
self.SetMenuBar (menubar)
In the create_menubar method, I got an error about the global name
"menu_items " not being defined, and this was fixed by putting "self." in
front of the variable name.
But why is this necessary? Doesn't a method look in its enclosing class,
or is that not one of the levels of scope?
class DataAccessFrame (wx.Frame):
menu_items = [('File', 'New Database', 'New Record', 'Open
Database...',
'Open Record...', 'Save Record', 'Save All Records',
'Close Record', 'Close Database'),
('Edit', 'Undo', 'Redo', 'Cut', 'Copy', 'Paste'),
('Help',)]
def __init__(self):
wx.Frame.__init __(self, None, title='Database Access Panel')
panel = wx.Panel(self)
self.create_men ubar()
# notebook = wx.Notebook(pan el)
# sizer = wx.BoxSizer()
# sizer.Add(noteb ook, 1, wx.EXPAND)
# panel.SetSizer( sizer)
def create_menubar( self):
menubar = wx.MenuBar()
for item in self.menu_items :
menu = wx.Menu()
menubar.Append( menu, item[0])
for subitem in item[1:]:
menu.Append(-1, subitem)
self.SetMenuBar (menubar)
In the create_menubar method, I got an error about the global name
"menu_items " not being defined, and this was fixed by putting "self." in
front of the variable name.
But why is this necessary? Doesn't a method look in its enclosing class,
or is that not one of the levels of scope?
Comment