Need help with the get() method of a Text entry
James Stroud
jstroud at mbi.ucla.edu
Thu Apr 12 16:51:26 EDT 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