text: # Mad Lib
  # Create a story based on user input
  
  from tkinter import *
  
  class Application(Frame):
      """ GUI application that creates a story based on user input. """
      def __init__(self, master):
          """ Initialize Frame. """
          super(Application, self).__init__(master)  
          self.grid()
          self.create_widgets()
  
      def create_widgets(self):
          """ Create widgets to get story information and to display story. """
          # create instruction label
          Label(self,
                text = "Enter information for a new story"
                ).grid(row = 0, column = 0, columnspan = 2, sticky = W)
  
          # create a label and text entry for the name of a person
          Label(self,
                text = "Person: "
                ).grid(row = 1, column = 0, sticky = W)
          self.person_ent = Entry(self)
          self.person_ent.grid(row = 1, column = 1, sticky = W)
  
          # create a label and text entry for a plural noun
          Label(self,
                text = "Plural Noun:"
                ).grid(row = 2, column = 0, sticky = W)
          self.noun_ent = Entry(self)
          self.noun_ent.grid(row = 2, column = 1, sticky = W)
  
          # create a label and text entry for a verb
          Label(self,
                text = "Verb:"
                ).grid(row = 3, column = 0, sticky = W)
          self.verb_ent = Entry(self)
          self.verb_ent.grid(row = 3, column = 1, sticky = W)
       
          # create a label for adjectives check buttons
          Label(self,
                text = "Adjective(s):"
                ).grid(row = 4, column = 0, sticky = W)
  
          # create itchy check button
          self.is_itchy = BooleanVar()
          Checkbutton(self,
                      text = "itchy",
                      variable = self.is_itchy
                      ).grid(row = 4, column = 1, sticky = W)
  
          # create joyous check button
          self.is_joyous = BooleanVar()
          Checkbutton(self,
                      text = "joyous",
                      variable = self.is_joyous
                      ).grid(row = 4, column = 2, sticky = W)
  
          # create electric check button
          self.is_electric = BooleanVar()
          Checkbutton(self,
                      text = "electric",
                      variable = self.is_electric
                      ).grid(row = 4, column = 3, sticky = W)
  
          # create a label for body parts radio buttons
          Label(self,
                text = "Body Part:"
                ).grid(row = 5, column = 0, sticky = W)
  
          # create variable for single, body part
          self.body_part = StringVar()
          self.body_part.set(None)
    
          # create body part radio buttons
          body_parts = ["bellybutton", "big toe", "medulla oblongata"]
          column = 1
          for part in body_parts:
              Radiobutton(self,
                          text = part,
                          variable = self.body_part,
                          value = part
                          ).grid(row = 5, column = column, sticky = W)
              column += 1
  
          # create a submit button
          Button(self,
                 text = "Click for story",
                 command = self.tell_story
                 ).grid(row = 6, column = 0, sticky = W)
  
          self.story_txt = Text(self, width = 75, height = 10, wrap = WORD)
          self.story_txt.grid(row = 7, column = 0, columnspan = 4)
  
      def tell_story(self):
          """ Fill text box with new story based on user input. """
          # get values from the GUI
          person = self.person_ent.get()
          noun = self.noun_ent.get()
          verb = self.verb_ent.get()
          adjectives = ""
          if self.is_itchy.get():
              adjectives += "itchy, "
          if self.is_joyous.get():
              adjectives += "joyous, "
          if self.is_electric.get():
              adjectives += "electric, "
          body_part = self.body_part.get()
  
          # create the story
          story = "The famous explorer "
          story += person
          story += " had nearly given up a life-long quest to find The Lost City of "
          story += noun.title()
          story += " when one day, the "
          story += noun
          story += " found "
          story += person + ". "
          story += "A strong, "
          story += adjectives
          story += "peculiar feeling overwhelmed the explorer. "
          story += "After all this time, the quest was finally over. A tear came to "
          story += person + "'s "
          story += body_part + ". "
          story += "And then, the "
          story += noun
          story += " promptly devoured "
          story += person + ". "
          story += "The moral of the story? Be careful what you "
          story += verb
          story += " for."
          
          # display the story                                
          self.story_txt.delete(0.0, END)
          self.story_txt.insert(0.0, story)
  
  # main
  root = Tk()
  root.title("Mad Lib")
  app = Application(root)
  root.mainloop()
  