title: tkinter event handler reference lost on widgets
body: <p>I put a event handler in a class <code>Verification</code> in a separated file <code>verification.py</code> (tried to make the code modular). The main GUI code is as follows,</p>
  
  <pre><code>from tkinter import *
  from make_widget import *
  from verification import *
  
  class LoginFrame(Frame):
      def __init__(self, parent):
      super(LoginFrame, self).__init__()
  
      self.parent = parent        
      self.initUI()
  
      # initialize the login screen UI  
      def initUI(self): 
          # Set up login frame properties 
          self.parent.title("Login Screen")
  
          # creating instruction label
          self.inst_lbl = MakeWidget.make_label(self.parent, "Please login to continue")
  
          # creating labels and entries for user name and password
          self.user_name = MakeWidget.make_entry(self.parent, caption="User Name:")
          self.pwd = MakeWidget.make_entry(self.parent, caption="User Password:", show="*")
  
          # create a login button
          login_btn = MakeWidget.make_button(self.parent, Verification.verify_user(self.user_name, self.pwd, self.inst_lbl), "Login")        
  
  
  def main():
      top = Tk()    
      app = LoginFrame(top)
      top.mainloop()
  
  
  if __name__ == '__main__':
      main()
  
  # verification.py
  from tkinter import * 
  
  class Verification:
  # verify user name and password
  #----------------------------------------------------------------------
  @staticmethod
  def verify_user(user_name, pwd, inst_lbl):
      """verify users"""
      if user_name.get() == "admin" and pwd.get() == "123":
          inst_lbl.configure(text="User verified")
      else:
          inst_lbl.configure(text="Access denied. Invalid username or password")
  
  
  # make_widget.py
  from tkinter import * 
  
  class MakeWidget(Frame):
  def __init__(self, parent):
      super(MakeWidget, self).__init__()
  
      self.parent = parent        
  
  
  # create a button widget 
  #----------------------------------------------------------------------
  @staticmethod
  def make_button(parent, command, caption=NONE, side=TOP, width=0, **options):
      """make a button"""
      btn = Button(parent, text=caption, command=command)
  
      if side is not TOP:
          btn.pack(side=side)
      else:
          btn.pack()    
  
      return btn
  
  
  # create a label widget
  @staticmethod
  def make_label(parent, caption=NONE, side=TOP, **options):
      label = Label(parent, text=caption, **options)
  
      if side is not TOP:
          label.pack(side=side)
      else:
          label.pack()
  
      return label
  
  
  # create a entry widget
  @staticmethod
  def make_entry(parent, caption=NONE, side=TOP, width=0, **options):
      MakeWidget.make_label(parent, caption, side)
      entry = Entry(parent, **options)
      if width:
          entry.config(width=width)
      if side is not TOP:
          entry.pack(side=side)
      else:
          entry.pack()
  
      return entry        
  </code></pre>
  
  <p>Now, I expected the <code>inst_lbl</code> in <code>LoginFrame</code> to be able to <code>configure</code> and display the new text based on the <code>user_name</code> and <code>pwd</code>, but <code>inst_lbl</code> didn't change the text (no error was generated). So how to resolve the issue.   </p>