title: python: Taking an Tkinter entry value
body: <p>I've been trying to get an entry value (the S1 in the code) to set itself as a value (STR in the _attributes dictionary), and I just can't get it to work.  I want to make this an eventual toploop, but am going a step at a time on this, as I'm new to programming in general.  Am I going about this the right way, or should I just have a button that, when pressed, does a lookup on the entry value at that time and goes with it, instead?  I've gone through several tutorials and lessons I've found online for Tkinter, but still seem to be miles away from being able to make anything work the way I expect it to.</p>
  
  <pre><code>#! usr/bin/python27
  from Tkinter import *
  
  class Character:
  
      def __init__(self, **kvargs):
          self._attributes = kvargs
  
      def set_attributes(self, key, value):
          self._attributes[key] = value
          return
  
      def get_attributes(self, key):
          return self._attributes.get(key, None)
  
  
  def attrInput(stat, x, y):
     """Creates a label for entry box"""
     L = Label(B,
               width = 5,
               relief = RIDGE,
               anchor = E,
               text = stat).grid(row = x,
                               column = y)
  
  B = ""
  def main():
  
      Person = Character()
  
      B = Tk()
  
      S1 = Entry(B, width = 3)
      S1.grid(row = 0, column = 1)
      S1.bind("&lt;Key&gt;", Person.set_attributes('STR', S1.get()) )
      attrInput("Str: ", 0, 0)
  
      Button(B, text='Quit', command=B.destroy).grid(row=3, column=0, sticky=W, pady=4)
  
      B.mainloop()
  
      print Person.__dict__
  
  if __name__ == '__main__': main()
  </code></pre>
  
  <p>new code (seems to be working, I'm getting what I want out of it, at least).  I'll have to modify it slightly to make it a toploop, but here's the foundation</p>
  
  <pre><code>class Character:
  
      def __init__(self, **kvargs):
          self._attribute = kvargs
  
      def set_attribute(self, key, value):
          self._attribute[key] = value
          return
  
      def get_attribute(self, key):
          return self._attribute.get(key, None)
  
  
  class attrAsk:
  
      def __init__(self, master, Char, attrName, Row, Column):
          self.Char = Char
          self.attrName = attrName
          attrInput(attrName+":", Row, Column)
          self.e = Entry(master, width = 3)
          self.e.grid(row = Row, column = Column+1)
          self.e.bind("&lt;KeyRelease&gt;", self.set_attr)
  
      def set_attr(self, event):
          self.Char.set_attribute(self.attrName, self.e.get())
  
  
  def attrInput(stat, x, y):
     """Creates a label for entry box"""
     L = Label(box,
               width = 5,
               relief = RIDGE,
               anchor = E,
               text = stat).grid(row = x,
                                 column = y)
  
  Person= Character()
  
  
  box = Tk()
  
  STRENT = attrAsk(box, Person, "STR", 0, 0)
  DEXENT = attrAsk(box, Person, "DEX", 1, 0)
  CONENT = attrAsk(box, Person, "CON", 2, 0)
  INTENT = attrAsk(box, Person, "INT", 3, 0)
  WISENT = attrAsk(box, Person, "WIS", 4, 0)
  CHAENT = attrAsk(box, Person, "CHA", 5, 0)
  
  Button(box,
         text='Continue',
         command=box.destroy).grid(columnspan = 2,
                                                         row=8,
                                                         column=0,
                                                         sticky=W,
                                                         pady=4)
  
  box.mainloop()
  
  print Person.__dict__
  </code></pre>