strange partial function aciton

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • luofeiyu
    New Member
    • Jul 2011
    • 18

    strange partial function aciton

    code1 ok
    Code:
    from Tkinter import *
    from functools import partial
    fields = 'Name', 'Job', 'Pay'
        
    def fetch(entries,event):
        for entry in entries:
           print 'Input => "%s"' % entry.get()        
        print  event
        
        
    def makeform(root, fields):
        entries = []
        for field in fields:
            row = Frame(root)                          
            lab = Label(row, width=5, text=field)      
            ent = Entry(row)
            row.pack(side=TOP, fill=X)                  
            lab.pack(side=LEFT)
            ent.pack(side=RIGHT, expand=YES, fill=X)    
            entries.append(ent)
        return entries
              
        
    if __name__ == '__main__':
              
        root = Tk()
        ents = makeform(root, fields)
        root.bind('<Return>', partial(fetch,ents))
        root.mainloop()
    code2 fail i don't understand why ?
    Code:
    from Tkinter import *
    from functools import partial
    fields = 'Name', 'Job', 'Pay'
        
    def fetch(entries,event):
        for entry in entries:
           print 'Input => "%s"' % entry.get()        
        print  event
        
        
    def makeform(root, fields):
        entries = []
        for field in fields:
            row = Frame(root)                          
            lab = Label(row, width=5, text=field)      
            ent = Entry(row)
            row.pack(side=TOP, fill=X)                  
            lab.pack(side=LEFT)
            ent.pack(side=RIGHT, expand=YES, fill=X)    
            entries.append(ent)
        return entries
              
        
    if __name__ == '__main__':
              
        root = Tk()
        ents = makeform(root, fields)
        root.bind('<Return>', partial(fetch,entries=ents))
        root.mainloop()
    code3: fail i know the reason
    Code:
    from Tkinter import *
    from functools import partial
    fields = 'Name', 'Job', 'Pay'
        
    def fetch(event,entries):
        for entry in entries:
           print 'Input => "%s"' % entry.get()        
        print  event
        
        
    def makeform(root, fields):
        entries = []
        for field in fields:
            row = Frame(root)                          
            lab = Label(row, width=5, text=field)      
            ent = Entry(row)
            row.pack(side=TOP, fill=X)                  
            lab.pack(side=LEFT)
            ent.pack(side=RIGHT, expand=YES, fill=X)    
            entries.append(ent)
        return entries
              
        
    if __name__ == '__main__':
              
        root = Tk()
        ents = makeform(root, fields)
        root.bind('<Return>', partial(fetch,ents))
        root.mainloop()
    code4: ok
    Code:
    from Tkinter import *
    from functools import partial
    fields = 'Name', 'Job', 'Pay'
        
    def fetch(event,entries):
        for entry in entries:
           print 'Input => "%s"' % entry.get()        
        print  event
        
        
    def makeform(root, fields):
        entries = []
        for field in fields:
            row = Frame(root)                          
            lab = Label(row, width=5, text=field)      
            ent = Entry(row)
            row.pack(side=TOP, fill=X)                  
            lab.pack(side=LEFT)
            ent.pack(side=RIGHT, expand=YES, fill=X)    
            entries.append(ent)
        return entries
              
        
    if __name__ == '__main__':
              
        root = Tk()
        ents = makeform(root, fields)
        root.bind('<Return>', partial(fetch,entries=ents))
        root.mainloop()

    there are four codes,code1,cod e4 it's ok,i know why;
    code2,code3,it' s not ok,i understand why code2 can't work,
    would you mind to tell me why code3 can't work??
    the output is:
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args )
    TypeError: fetch() got multiple values for keyword argument 'entries'

    i don't understand it.
Working...