Namespace troubles

Alan algotrhythm at gmail.com
Fri Nov 16 22:03:47 CET 2007


<snip>
> class MyFrame(wx.Frame):
>     def __init__(self, parent, id, title):
>         wx.Frame.__init__(self, parent, id, title, size=(600,500))
>
>         nb = wx.Notebook(self)
>         self.page1 = Form1(nb, -1)
>         nb.AddPage(self.page1, "Choose Patient")
>         self.page1.SetFocus()
>
>     def patient_lookup(self, first_ltrs):
>         self.page2 = Selectable.Repository(nb, -1, first_ltrs)
>         nb.AddPage(self.page2, "Patient Lookup")
>         self.page2.SetFocus()
>
<snip>

> I'm getting an error from the patient_lookup function:  "global name
> 'nb' is not defined".  I don't understand how a function in the same
> class cannot see the wx.Notebook instance "nb".  I know it exists
> somewhere I just haven't found the name for it.  I've tried
> "frame.nb", "self.nb", f = GetTopLevelParent(self) then f.nb.  How can
> an instance of something just disappear?
>
> Thanks for any help.
>
> Mike

nb is a local variable within the __init__() method only.

This is the same as, e.g.:

def foo():
    i = 0

def bar():
    print i

The use of i in bar() is an error, because it is only assigned in
foo()


If you want to make it available to all methods within a class then
you need to attach it to the instance of that class, e.g.:

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(600,500))
        self.nb = wx.Notebook(self)
        self.page1 = Form1(nb, -1)
        self.nb.AddPage(self.page1, "Choose Patient")
        self.page1.SetFocus()

    def patient_lookup(self, first_ltrs):
        self.page2 = Selectable.Repository(nb, -1, first_ltrs)
        self.nb.AddPage(self.page2, "Patient Lookup")
        self.page2.SetFocus()


--
Alan



More information about the Python-list mailing list