[Tutor] Fun with Label and Entry--Why NoneType?

Martin Walsh mwalsh at mwalsh.org
Tue Mar 17 20:53:20 CET 2009


Wayne Watson wrote:
> The program below is derived from an example in Grayson for showing how
> one might a dialog for entering passwords. The structure seems just like
> the original, down to the use of self, Label and Entry plus . Yet the
> print "here" statement produces:
>     here None <type 'NoneType'>
> I'm missing something. The NoneType causes the print of the self.lat to
> fail with get().
> 
> The original returns something from the corresponding body function, but
> taking it out does nothing in either program. The original program is
> posted above under "Modifying Grayson's Example 5_14".
> 
> # Derived from Grayson 5_14.py
> from   Tkinter import *
> from   tkSimpleDialog import Dialog
> import tkSimpleDialog
> import tkMessageBox
> #import Pmw
> 
> class DialogPrototype(Dialog):
> 
>     def body(self, master):
>         self.title("Enter Site Data")
>         Label(master, text='Latitude:').grid(row=0, sticky=W)
>         self.lat=Entry(master, width=12).grid(row=0, column=1)

This is where you diverge from the Grayson example. What you're saying
is that self.lat should be set to the result of Entry(...).grid(...)
which is always None, presumably. What I think you want is self.lat to
be a reference to the Entry widget itself. Try this,

          self.lat = Entry(master, width=12)
          self.lat.grid(row=0, column=1)

>        
>         Label(master, text='Longitude:').grid(row=0, column=2)
>         self.long=Entry(master, width=12).grid(row=0, column=3)

... and,
          self.long = Entry(master, width=12)
          self.long.grid(row=0, column=3)

>         print "here", self.long,type(self.long)
>         return
>    
>     def apply(self):
>         print "apply"
>         print self.lat.get()
>         print self.long.get()
> 
>     print "setting"
>     lat=1.0
>     long=0.0

Is that the way you indented the above, really? I suppose it could be
intentional, but probably not.

> 
> root = Tk()
> root.withdraw()
> dialog = DialogPrototype(root)

HTH,
Marty


More information about the Tutor mailing list