def __init__(self, parent=None):  # an extended frame
        Frame.__init__(self, parent)  # on default top-level
        self.pack(expand=YES, fill=BOTH)  # all parts expandable

        self.names = {}  # namespace for variables
        text = StringVar()
        entry(self, TOP, text)

        rows = ["abcd", "0123", "4567", "89()"]
        for row in rows:
            frm = frame(self, TOP)
            for char in row:
                button(frm,
                       LEFT,
                       char,
                       lambda x=text, y=char: x.set(x.get() + y))

        frm = frame(self, TOP)
        for char in "+-*/=":
            button(frm,
                   LEFT,
                   char,
                   lambda x=text, y=char: x.set(x.get() + ' ' + y + ' '))

        frm = frame(self, BOTTOM)
        button(frm, LEFT, 'eval', lambda x=self, y=text: x.eval(y))
        button(frm, LEFT, 'clear', lambda x=text: x.set(''))
 def display(self):
     key = self.index[self.cursor]           # show record at index cursor
     self.keytext.set(key)                   # change key in main box 
     record = self.table[key]                # in dict, dbm, shelf, class
     if self.sameKeys(record): 
         self.currform.title('PyForm - Key=' + `key`)  
         for (field, text) in self.currslots:
             text.set(`record[field]`)       # same fields? reuse form
     else:                                   # expr `x` works like repr(x)
         if self.currform:
             self.currform.destroy()         # different fields?  
         new = Toplevel()                    # replace current box
         new.title('PyForm - Key=' + `key`)  # new resizable window
         new.iconname("pform")
         left  = frame(new, LEFT)
         right = frame(new, RIGHT)
         self.currslots = []                 # list of (field, entry)
         for field in record.keys():
             label(left, TOP, `field`)       # key,value to strings
             text = StringVar()              # we could sort keys here
             text.set( `record[field]` )
             entry(right, TOP, text, width=40)
             self.currslots.append((field, text))
         self.currform = new
         new.protocol('WM_DELETE_WINDOW', lambda:0)   # ignore destroy's
     self.selectlist()                                # update listbox
 def display(self):
     key = self.index[self.cursor]  # show record at index cursor
     self.keytext.set(key)  # change key in main box
     record = self.table[key]  # in dict, dbm, shelf, class
     if self.sameKeys(record):
         self.currform.title('PyForm - Key=' + ` key `)
         for (field, text) in self.currslots:
             text.set( ` record[field] `)  # same fields? reuse form
     else:  # expr `x` works like repr(x)
         if self.currform:
             self.currform.destroy()  # different fields?
         new = Toplevel()  # replace current box
         new.title('PyForm - Key=' + ` key `)  # new resizable window
         new.iconname("pform")
         left = frame(new, LEFT)
         right = frame(new, RIGHT)
         self.currslots = []  # list of (field, entry)
         for field in record.keys():
             label(left, TOP, ` field `)  # key,value to strings
             text = StringVar()  # we could sort keys here
             text.set( ` record[field] `)
             entry(right, TOP, text, width=40)
             self.currslots.append((field, text))
         self.currform = new
         new.protocol('WM_DELETE_WINDOW', lambda: 0)  # ignore destroy's
     self.selectlist()  # update listbox
 def makeMainBox(self):
     frm = frame(self, TOP)
     frm.config(bd=2)
     button(frm, LEFT, 'next',  self.onNext)       # next in list
     button(frm, LEFT, 'prev',  self.onPrev)       # backup in list
     button(frm, LEFT, 'find',  self.onFind)       # find from key
     frm = frame(self, TOP)
     self.keytext = StringVar()                    # current record's key
     label(frm, LEFT, 'KEY=>')                     # change before 'find'
     entry(frm, LEFT,  self.keytext)             
     frm = frame(self, TOP)
     frm.config(bd=2)
     button(frm,  LEFT,  'store',  self.onStore)     # updated entry data
     button(frm,  LEFT,  'new',    self.onNew)       # clear fields
     button(frm,  LEFT,  'index',  self.onMakeList)  # show key list
     button(frm,  LEFT,  'delete', self.onDelete)    # show key list
     button(self, BOTTOM,'quit',   self.quit)        # from guimixin
 def makeMainBox(self):
     frm = frame(self, TOP)
     frm.config(bd=2)
     button(frm, LEFT, 'next', self.onNext)  # next in list
     button(frm, LEFT, 'prev', self.onPrev)  # backup in list
     button(frm, LEFT, 'find', self.onFind)  # find from key
     frm = frame(self, TOP)
     self.keytext = StringVar()  # current record's key
     label(frm, LEFT, 'KEY=>')  # change before 'find'
     entry(frm, LEFT, self.keytext)
     frm = frame(self, TOP)
     frm.config(bd=2)
     button(frm, LEFT, 'store', self.onStore)  # updated entry data
     button(frm, LEFT, 'new', self.onNew)  # clear fields
     button(frm, LEFT, 'index', self.onMakeList)  # show key list
     button(frm, LEFT, 'delete', self.onDelete)  # show key list
     button(self, BOTTOM, 'quit', self.quit)  # from guimixin
    def __init__(self):                                # an extended frame
        Frame.__init__(self)                           # on default top-level
        self.pack(expand=YES, fill=BOTH)               # all parts expandable
        self.master.title('Python Calculator 0.1')     # 6 frames plus entry
        self.master.iconname("pcalc1")

        self.names = {}                                # namespace for variables
        text = StringVar()
        entry(self, TOP, text)

        rows = ["abcd", "0123", "4567", "89()"]
        for row in rows:
            frm = frame(self, TOP)
            for char in row: OperandButton(frm, text, char)

        frm = frame(self, TOP)
        for char in "+-*/=": OperandButton(frm, text, char)

        frm = frame(self, BOTTOM)
        button(frm, LEFT, 'eval',  lambda x=self, y=text: x.eval(y) )
        button(frm, LEFT, 'clear', lambda x=text: x.set('') )
    def __init__(self, parent=None):                   # an extended frame
        Frame.__init__(self, parent)                   # on default top-level
        self.pack(expand=YES, fill=BOTH)               # all parts expandable

        self.names = {}                                # namespace for variables
        text = StringVar()
        entry(self, TOP, text)

        rows = ["abcd", "0123", "4567", "89()"]
        for row in rows:
            frm = frame(self, TOP)
            for char in row: button(frm, LEFT, char, 
                               lambda x=text, y=char: x.set(x.get() + y))

        frm = frame(self, TOP)
        for char in "+-*/=": button(frm, LEFT, char,
                               lambda x=text, y=char: x.set(x.get()+' '+y+' '))

        frm = frame(self, BOTTOM)
        button(frm, LEFT, 'eval',  lambda x=self, y=text: x.eval(y) )
        button(frm, LEFT, 'clear', lambda x=text: x.set('') )
    def __init__(self):  # an extended frame
        Frame.__init__(self)  # on default top-level
        self.pack(expand=YES, fill=BOTH)  # all parts expandable
        self.master.title("Python Calculator 0.1")  # 6 frames plus entry
        self.master.iconname("pcalc1")

        self.names = {}  # namespace for variables
        text = StringVar()
        entry(self, TOP, text)
        rows = ["abcd", "0123", "4567", "89()"]
        for row in rows:
            frm = frame(self, TOP)
            for char in row:
                button(frm, LEFT, char, lambda x=text, y=char: x.set(x.get() + y))

        frm = frame(self, RIGHT)
        for char in "+-*/=":
            button(frm, TOP, char, lambda x=text, y=char: x.set(x.get() + " " + y + " "))

        frm = frame(self, BOTTOM)
        button(frm, LEFT, "eval", lambda x=self, y=text: x.eval(y))
        button(frm, RIGHT, "clear", lambda x=text: x.set(""))
    def __init__(self):                                # an extended frame
        Frame.__init__(self)                           # on default top-level
        self.pack(expand=YES, fill=BOTH)               # all parts expandable
        self.master.title('Python Calculator 0.1')     # 6 frames plus entry
        self.master.iconname("pcalc1")

        self.names = {}        # namespace for variables
        text = StringVar()
        entry(self, TOP, text)

        frm = frame(self, RIGHT)
        for char in "+-*/=": button(frm, TOP, char,
                               lambda x=text, y=char: x.set(x.get()+' '+y+' '))

        rows = ["abcd", "0123", "4567", "89()"]
        for row in rows:
            frm = frame(self, TOP)
            for char in row: button(frm, LEFT, char, 
                               lambda x=text, y=char: x.set(x.get() + y))

        frm = frame(self, BOTTOM)
        button(frm, LEFT, 'eval',  lambda x=self, y=text: x.eval(y) )
        button(frm, LEFT, 'clear', lambda x=text: x.set('') )
 def onMakeList(self):
     if self.listbox: return                    # already up?
     new = Toplevel()                           # new resizable window
     new.title("PyForm - Key Index")            # select keys from a listbox
     new.iconname("pindex")
     frm    = frame(new, TOP)
     scroll = Scrollbar(frm)
     list   = Listbox(frm, bg='white')
     scroll.config(command=list.yview, relief=SUNKEN)
     list.config(yscrollcommand=scroll.set, relief=SUNKEN)
     scroll.pack(side=RIGHT, fill=BOTH)
     list.pack(side=LEFT, expand=YES, fill=BOTH)    # pack last, clip first
     for key in self.index:                         # add to list-box
         list.insert(END, key)                      # or: sort list first
     list.config(selectmode=SINGLE, setgrid=1)      # select,resize modes
     list.bind('<Double-1>', self.onList)           # on double-clicks
     self.listbox = list
     if self.index and self.cursor >= 0:            # highlight position
         self.selectlist()
     new.protocol('WM_DELETE_WINDOW', lambda:0)     # ignore destroy's
 def onMakeList(self):
     if self.listbox: return  # already up?
     new = Toplevel()  # new resizable window
     new.title("PyForm - Key Index")  # select keys from a listbox
     new.iconname("pindex")
     frm = frame(new, TOP)
     scroll = Scrollbar(frm)
     list = Listbox(frm, bg='white')
     scroll.config(command=list.yview, relief=SUNKEN)
     list.config(yscrollcommand=scroll.set, relief=SUNKEN)
     scroll.pack(side=RIGHT, fill=BOTH)
     list.pack(side=LEFT, expand=YES, fill=BOTH)  # pack last, clip first
     for key in self.index:  # add to list-box
         list.insert(END, key)  # or: sort list first
     list.config(selectmode=SINGLE, setgrid=1)  # select,resize modes
     list.bind('<Double-1>', self.onList)  # on double-clicks
     self.listbox = list
     if self.index and self.cursor >= 0:  # highlight position
         self.selectlist()
     new.protocol('WM_DELETE_WINDOW', lambda: 0)  # ignore destroy's