Need help with the get() method of a Text entry

James Stroud jstroud at mbi.ucla.edu
Thu Apr 12 22:51:26 CEST 2007


Chad wrote:
> I have a simple little program that brings up asks the user to enter a
> note, then is supposed to place that note into a text file when the
> user hits the submit button.  However, when the user hits the submit
> button, absolutely nothing happens.  IDLE doesn't give an error
> message and the note is not entered into the text file.  For
> troubleshooting puposes, I wanted to see if IDLE would at least print
> the user's input; it doesn't do that either.  Can someone please help
> me?
> 
> Here is the code:
> 
> from Tkinter import *
> 
> class Application(Frame):
>     """ GUI application that creates a story based on user input. """
>     def __init__(self, master):
>         """ Initialize Frame. """
>         Frame.__init__(self, master)
>         self.grid()
>         self.create_widgets()
> 
>     def create_widgets(self):
>         """ Create widgets to get note information. """
>         # create instruction label and text entry for notes
>         Label(self,
>               text = "Notes"
>               ).grid(row = 0, column = 0, columnspan = 2 )
> 
> 
>         self.notes_ent = Text(self, width = 75, height = 10, wrap =
> WORD)
>         self.notes_ent.grid(row = 2, column = 0 ,columnspan = 7,
> rowspan = 3, sticky = W)
>         create submit button
>         text1 = StringVar(self)
>         text1 = self.notes_ent.get(1.0, END)
>         self.notes_ent.config(state=NORMAL)
>         Button(self,
>                  text = "Add Note",
>                  command = self.add_note(text1)
>                ).grid(row = 1, column = 0, sticky = W)
> 
>     def add_note(self, text1):
>         print text1
>         text_file = open("write_it.txt", "a+")
>         text_file.write(text1)
> 
> root = Tk()
> root.title("Mad Lib")
> app = Application(root)
> root.mainloop()
> 

Your main problem is that you are calling add_note when you bind it. You 
don't want to do that. It will get called when the event (button press) 
happens. Most (or hopefully) all of the remedy is:

1. rename text1 to self.text1
2. change "command = self.add_note(text1)" to
           "command = self.add_note"
3. change "def add_note(self, text1):" to
           "def add_note(self):"
4. delete "print text1"
5. chane "text_file.write(text1)" to
          "text_file.write(text1.get())"

I think I got everything.

James



More information about the Python-list mailing list