strange partial function aciton

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

strange partial function aciton

luofeiyu
code1  ok
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  ?
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
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
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,code4 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.

_______________________________________________
Tkinter-discuss mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/tkinter-discuss