python - AttributeError: Entry instance has no attribute '__len__' -


i quite new python, have been playing around tkinter , requests try create simple program can log web application. have been getting following error:

exception in tkinter callback traceback (most recent call last):   file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk/tkinter.py", line 1410, in __call__     return self.func(*args)   file "test.py", line 35, in login     c.post('http://fruro.com/login.php', data=self.payload)   file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/sessions.py", line 399, in post     return self.request('post', url, data=data, **kwargs)   file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/sessions.py", line 343, in request     prep = req.prepare()   file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/models.py", line 222, in prepare     p.prepare_body(self.data, self.files)   file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/models.py", line 375, in prepare_body     body = self._encode_params(data)   file "/users/peter/desktop/fruropy/fruro/lib/python2.7/site-packages/requests/models.py", line 81, in _encode_params     return urlencode(result, doseq=true)   file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/urllib.py", line 1311, in urlencode     len(v) attributeerror: entry instance has no attribute '__len__' 

i have been trying figure out have gone wrong several hours don't know i'm doing wrong.

here code i'm using:

from tkinter import * requests import session  class login:      def __init__(self, master):          frame = frame(master)         frame.pack()          self.emlabel = label(frame, text="email:")         self.emlabel.pack(side=left)          self.email = entry(frame, width=15)         self.email.pack(side=left)          self.paslabel = label(frame, text="password:")         self.paslabel.pack(side=left)          self.password = entry(frame, show="*", width=15)         self.password.pack(side=left)          self.hi_there = button(frame, text="login", command=self.login)         self.hi_there.pack()      def login(self):          self.payload = {             'action': 'login',             'email': self.email,             'password': self.password          }          session() c:             c.post('http://fruro.com/login.php', data=self.payload)             self.request = c.get('http://fruro.com')             print self.request.headers             print self.request.text   root = tk() login = login(root) root.title("login account") root.mainloop() 

any appreciated. thank in advance.

the problem on line,

c.post('http://fruro.com/login.php', data=self.payload) 

and happening because dict passing in data parameter has values references entry widgets , not content of widgets. when requests tries len, error since entry doesn't implement __len__ (not wanted anyway). fix change self.payload like,

self.payload = {         'action': 'login',         'email': self.email.get(),      # call method return         'password': self.password.get() # value in entry widgets     } 

Comments