A Dangling Tk Entry

W. eWatson notvalid2 at sbcglobal.net
Tue Mar 10 00:14:51 EDT 2009


Marc 'BlackJack' Rintsch wrote:
> On Mon, 09 Mar 2009 04:22:57 -0700, W. eWatson wrote:
> 
>> Marc 'BlackJack' Rintsch wrote:
>>> On Sun, 08 Mar 2009 22:20:09 -0700, W. eWatson wrote:
>>>
>>>> You didn't answer my question why entry is necessary at all. The
>>>> original author thought it was necessary to return entry. I'll give
>>>> you a peek at a segment of the code I'm working with here:
>>>>
>>>> class Enter_Data_Dialog(tkSimpleDialog.Dialog):
>>>>
>>>>      def __init__(self, parent, sdict):
>>>>          self.sdict = sdict
>>>>          tkSimpleDialog.Dialog.__init__(self, parent)
>>>>
>>>>      def body(self,master):
>>>>          self.title("Set a Number Entry Dialog")
>>>>
>>>>          Label( master, text="Number ").grid(row=0, sticky=W)
>>>>          self.anumberVar = StringVar()
>>>>          entry = Entry(master, width=10,
>>>>   			textvariable=self.anumberVar).grid(row=0,
>>> column=1)
>>>>          self.anumberVar.set( "%d" % self.sdict["anumber"] )
>>>>
>>>>          return entry
>>> `entry` is unnecessary here.  But that was not obvious from your
>>> previous example, as you trimmed the code.  Now it is clear that
>>> `entry` is always `None` because that's what `grid()` returns.
>>>
>>> But according to the docs this method should return the widget, that
>>> should get the focus, so maybe the author really wanted to return the
>>> `Entry` instance here, instead of `None`.
>> He's got to return something, because he uses it upon return, as here:
> 
> `entry` is always `None`, so it is the same as returning nothing because 
> every function has an implicit ``return None`` at the end.
> 
>>      def Set_Enter_Data(self):
>>          sdict = {}
>>          sdict[ "ok" ] = False
>>          sdict[ "anumber" ] = self.anumber
>>          dialog = Enter_Data_Dialog( self.master, sdict ) <--- returning
> 
> That's not a call to the `body()` method so that ``return`` is irrelevant 
> here.  Here an instance of `Enter_Data_Dialog` is created.  No ``return`` 
> involved.
> 
> BTW if this is really just a dialog to enter a number, the functions 
> `askinteger()` or `askfloat()` from the `tkSimpleDialog` module can be 
> used.
> 
> Ciao,
> 	Marc 'BlackJack' Rintsch
What you are seeing here as an example, is a paired down version of the 2000 
line program to focus on the particular problem at hand. The full code uses 
up to 20 variable of various types, via the dialog object. It uses them 
successfully to get the values the user has entered. How can it be 
irrelevant if it works? The author thought this was the way to do it. It's 
not my invention. It's no fluke. He does the same thing in another dialog 
that brings back about 6 values.

     def body(self,master):
         self.title("Box Settings")

         print "body from BSD"
              ...

         frame_delay = Entry( master,
                textvariable=self.frame_delay_var,
                width=10 ).grid( row=2, column=1, sticky=W )
	...
         Entry( master,
                textvariable=self.untrigger_threshold_var,
                width=10 ).grid( row=4, column=1, sticky=W )
         self.untrigger_threshold_var.set( "%d" %
                        self.sdict["untrigger_threshold"] )

         return frame_delay

BTW, forget the textvariable use. They are irrelevant.
-- 
                                W. eWatson

              (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time)
               Obz Site:  39° 15' 7" N, 121° 2' 32" W, 2700 feet

                     Web Page: <www.speckledwithstars.net/>




More information about the Python-list mailing list