title: Tkinter Entry always returning empty string
body: <p>I'm trying to create a GUI application using <code>Tkinter</code>. This interface is made of the following widgets: a <em>button</em>, an entry and a text. 
  The image below shows it.</p>
  
  <p><img src="https://i.stack.imgur.com/ejqoo.png" alt="app image"></p>
  
  <p>The idea behind this app is: the user enters a word on the <em>entry</em> and on hit the <em>Meaning</em> button it's meaning is showed in the text widget.</p>
  
  <p>My code is splitted in two classes: one for GUI and another for the app itself.</p>
  
  <p><strong>GUI</strong> (removed the imaged showed before to reduce coding):</p>
  
  <pre><code> class Gui:
      def __init__(self, master=None):
          if master is None:
              return
          else:
              self.word = StringVar()
              self.word_meaning = None
              self.app_frame = Frame(master)
              self.app_frame.grid()
              self.create_app_frame()
              self.entry_widget = Entry(self.app_frame, textvariable=self.word)
              self.button_widget = Button(self.app_frame, text='Meaning', command=self.__handler_entry)
              self.text_widget = Text(self.app_frame, height=10, width=30)
              self.crete_app_frame()
  
      def crete_app_frame(self):    
          self.entry_widget.grid(row=0, column=0)
          self.button_widget.grid(row=0, column=1)
          self.text_widget.grid(row=1, column=0, columnspan=2)
  
      def get_word(self):
          return self.word.get()
  
      def set_word_meaning(self, meaning):
          self.word_meaning = meaning
  
      def __handler_entry(self):
          self.text_widget.delete(0., END)
          self.text_widget.insert(END, self.word_meaning)
  </code></pre>
  
  <p><strong>Application</strong>:</p>
  
  <pre><code>class InteractiveDictionary:
      def __init__(self, filename):
          with open(filename, 'r') as file:
              self.data = json.load(file)
  
      def get_meaning(self, term):
          print('-------------------')
          print(f"world is:{term}")
          print('-------------------')
          term = str(term)
          term = term.lower()
          if term in self.data:
              return self.data[term]
          else:
              return "The world you\'re looking for doesn\'t exist."
  </code></pre>
  
  <p><strong>Main</strong>:</p>
  
  <pre><code>if __name__ == '__main__':
      window = Tk()
      window.title('Interactive Dictionary')
      dictionary = InteractiveDictionary('words.json')
      app = Gui(master=window)
      word = app.get_word()
      word_meaning = dictionary.get_meaning(word)
      if type(word_meaning) == list:
          for i in word_meaning:
              app.set_word_meaning(i)
      else:
          app.set_word_meaning(word_meaning)
      window.mainloop()
  </code></pre>
  
  <p>The application works fine when results are shown on console. However, when I try to show on the GUI, the word captured by <code>get_word()</code> method is not correctly passed to dictionaries <code>get_meaning()</code> method. An <em>empty</em> is passed.</p>
  
  <p>My suspect that it is related to the way I call Tkinter on main. 
  I would like to keep Gui and the app isolated. So, remove code in the main to <code>__handler_entry()</code> is not an option. Someone knows how can I fix it and made my app run properly?</p>