Rhodri James wrote:
> On Tue, 10 Mar 2009 04:14:51 -0000, W. eWatson <notval...@sbcglobal.net>
> wrote:
>
>> 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):
> [snip]
>
> You're misunderstanding.  The line that you arrowed above has absolutely
> nothing whatsoever to do with the method "body()", so keeping on showing
> us ever fuller version of that isn't going to prove anything.  Now if
> you were to show us a line like "something = dialog.body(something_else)"
> then you might be onto something, but personally I suspect you're going
> to find that rather hard.
>
I'd be happy to comply. Perhaps I'm mistaken as what I was responding to in the entanglement of responses, but I think I was making a point (again) that the technique by the author works. This should clear matters up completely. Here's the full 80+ lines of the example code. Note wrapped lines.
================================
from Tkinter import *
import tkSimpleDialog
import tkMessageBox

class IntVar_GUI:

    def __init__(self, master):

        master.title('Control Variable Fun')

        self.frame = Frame(master,takefocus=1,
                           highlightthickness=2, highlightcolor='blue')
        self.frame.configure(height=200,width=200)
        self.frame.pack()
        #self.frame.bind("<KeyPress>", self.HandleKey)

        self.anumber = 123      # Want name and value to be configurable

        self.master = master
        menu = Menu(master)
        master.config(menu=menu)

        self.mainMenu = Menu(menu)
        menu.add_cascade(label="My Menu",menu=self.mainMenu)
self.mainMenu.add_command(label="Enter Data", command=self.Set_Enter_Data)
        self.mainMenu.add_command(label="Exit",underline=1,command=self.Quit)
        self.Focus()


    def Set_Enter_Data(self):
        sdict = {}
        sdict[ "ok" ] = False
        sdict[ "anumber" ] = self.anumber
        dialog = Enter_Data_Dialog( self.master, sdict )
        self.Focus()
        print "Howdy, set data. Number is:", dialog.anumberVar.get()
        print "dict:", dialog.sdict
        if not dialog.sdict["ok"]:
            return
        try:
            self.anumber = int(eval(dialog.anumberVar.get()))
            print "OK"
        except:
            print "Not OK"
            pass
        print "self.anumber:", self.anumber

    def Quit(self):
        self.running = False
        #self.master.quit()
        self.master.destroy()

    def Focus( self ):
        self.frame.focus_set()

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)
        entry.insert(0,11)
        self.anumberVar.set( "%d" % self.sdict["anumber"] )

        return entry

    def apply(self):
        self.sdict["ok"] = True

def Process():
    root = Tk()
    app = IntVar_GUI(root)
    root.mainloop()

if __name__ == "__main__":
    Process()
====================================
Because I'm operating out for a command prompt, I don't seem to be able to copy all the error msgs, but here is the last one shown involving line 68,
AttributeError: "None Type' object has no attribute 'insert'

Line 68 is entry.insert(0,11)

--
                               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/>

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to