title: Dynamically updating a tkinter label does not seem to work
body: <p>I am new to python and especially tkinter, and I have gone through all of the examples on here but I'm still stuck.</p>
  <p>I am trying to create something that sends messages back and forth, and currently having trouble updating the reply. I have taken bits out and just tried to manually update the label but no such luck, it may be something to do with it being on a tab? or even because I'm using grid to place my frames. Anyhow, any help would be deeply aprreciated.</p>
  <p>'''</p>
  <pre><code>class SharedInformation():
      '''
          Class: Information thats passed between networking and gui classes
      '''
      def __init__(self):
          self.manual_command_response = tk.StringVar()
  
  
  class Thread(threading.Thread):
      '''
          Class:Responsible for getting messages to and from the smart via Etherent
      '''
      def __init__(self, thread_name, thread_ID,info):
          threading.Thread.__init__(self)
          self.thread_name = thread_name
          self.thread_ID = thread_ID
          self.shared_info = info
  
          # helper function to execute the threads
      def run(self) -&gt; None:
          eth_data = &quot;&quot;
          while True:
              print(&quot;GOT DATA&quot;)
              print(type(eth_data))
  
              protobuf = receive_data(eth_data)
              print(protobuf)
              temp = decode_manual_message(protobuf)
  
              self.shared_info.manual_command_response.set(temp)
              print(&quot;Updated to :&quot; + self.shared_info.manual_command_response.get())
  
  
  class DTerm(tk.Tk):
      '''
      Class: Main GUI class
      '''
      def __init__(self):
          super().__init__()
          # Initalise Networking
          initalise_network()
  
          self.info = SharedInformation()
  
          # Receiving network thread
          self.thread1 = Thread(&quot;EthRec&quot;, 1000, self.info)
          self.thread1.start()
  
          self.root = tk.Tk()
          self.root.protocol(&quot;WM_DELETE_WINDOW&quot;, self.root.iconify)
          # make Esc exit the program
          self.root.bind('&lt;Escape&gt;', lambda e: self.root.destroy())
          self.root.title(&quot;d-term&quot;)
          self.root.attributes('-fullscreen', False)
  
          #Style the root page
          self.style = ttk.Style()
          self.style.theme_create( &quot;MyStyle&quot;, parent=&quot;alt&quot;, settings={
              &quot;TNotebook&quot;: {&quot;configure&quot;: {&quot;tabmargins&quot;: [2, 5, 2, 0] } },
              &quot;TNotebook.Tab&quot;: {&quot;configure&quot;: {&quot;padding&quot;: [50, 50] },}})
  
          self.style.theme_use(&quot;MyStyle&quot;)
  
          # Create the tabs
          self.tabControl = ttk.Notebook(self.root)
          self.root.grid_columnconfigure(0, weight=1)
          self.root.grid_columnconfigure(1, weight=1)
          self.root.grid_columnconfigure(2, weight=1)
          self.root.grid_columnconfigure(3, weight=1)
          self.root.grid_columnconfigure(4, weight=1)
          self.root.grid_columnconfigure(5, weight=1)
  
          self.root.grid_rowconfigure(0, weight=1)
          self.root.grid_rowconfigure(1, weight=1)
          self.root.grid_rowconfigure(2, weight=1)
          self.root.grid_rowconfigure(3, weight=1)
          self.root.grid_rowconfigure(4, weight=1)
          self.root.grid_rowconfigure(5, weight=1)
  
          self.stringy = tk.StringVar()
          self.stringy.set('Hello')
  
          t = Label(self.root, textvariable=self.stringy, height=10,width=20)
          t.grid(row=0, column=0, sticky=&quot;w&quot;)
          self.width= self.root.winfo_screenwidth()
          self.height= self.root.winfo_screenheight()
  
          self.tabControl.grid(row=1,column=0, padx=0, pady=50)
          self.tabControl.grid_columnconfigure(1, weight=1)
          self.tabControl.grid_rowconfigure(1, weight=1)
  
          self.tab1 = ttk.Frame(self.tabControl, width=self.width, height=600)
          self.tab2 = ttk.Frame(self.tabControl, width=self.width, height=600)
          self.tab3 = ttk.Frame(self.tabControl, width=self.width, height=600)
          self.tab4 = ttk.Frame(self.tabControl, width=self.width, height=600)
          self.tab5 = ttk.Frame(self.tabControl, width=self.width, height=600)
          self.tab6 = ttk.Frame(self.tabControl, width=self.width, height=600)
  
          self.tabControl.add(self.tab1, text ='Manual Commands')
          self.tabControl.add(self.tab2, text ='Sensor Commands')
          self.tabControl.add(self.tab3, text ='ADCP Commands')
          self.tabControl.add(self.tab4, text ='LPC Commands')
          self.tabControl.add(self.tab5, text ='UART Commands')
  
          #TAB 1
          self.entry = tk.Entry(self.tab1, fg='black', bg=&quot;white&quot;)
          self.button = tk.Button(self.tab1, text=&quot;Send Command&quot;, command=self.on_button)
          self.label = Label(self.tab1, textvariable=self.info.manual_command_response)
  
  
          self.label1 = Label(self.tab1, textvariable=self.stringy)
          self.label2 = Label(self.tab1, textvariable=self.stringy)
  
          self.entry.grid(row=4,column=40,columnspan=7,padx=10,pady=10)
          self.button.grid(row=4, column=0, padx=10,pady=10)
          self.label.grid(row=5,column=4)
          self.label1.grid(row=6,column=4)
          self.label2.grid(row=7, column=4)
  
          #TAB 3
          self.button2 = tk.Button(self.tab3, text=&quot;Battery Status&quot;, command=self.on_status_button)
          self.button2.grid(row=4,column=40,columnspan=7,padx=10,pady=10)
  
          self.tabControl.grid_columnconfigure(3, weight=1)
          self.tabControl.grid_rowconfigure(3, weight=1)
  
      def on_button(self) -&gt; None:
          '''
              call back used for sending manual commands
          :param self:
          :return: None
          '''
          temp = self.entry.get()
          send_data(manual_command(temp))
          print(temp)
          self.labek(text = &quot;Mjskdjskdj&quot;)
          self.stringy.set(&quot;DJSD&quot;)
  
      def on_status_button(self) -&gt; None:
              '''
                  call back used for status requests
              :param self:
              :return: None
              '''
  
  print(__name__)
  if __name__ == &quot;__main__&quot;:
      app = DTerm()
      app.mainloop()
  
  
  '''
  </code></pre>
  <p>p.s I'm trying to update stringy and label1. and I'm using python 3.9</p>