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

C

Chad

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()
 
J

James Stroud

Chad said:
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
 
J

James Stroud

Chad said:
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()


> text1 = StringVar(self)
> text1 = self.notes_ent.get(1.0, END)

You obviously added the second because the first will never work. Get
rid of both lines. Even if you intended the second, it immediately
nullifies the first. Instead of my previous suggestions, do this:

1. delete both "text1 =" lines
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. change "text_file.write(text1)" to
"text_file.notes_ent.get(1.0, END)

James
 
J

James Stroud

James said:
You obviously added the second because the first will never work. Get
rid of both lines. Even if you intended the second, it immediately
nullifies the first. Instead of my previous suggestions, do this:

1. delete both "text1 =" lines
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. change "text_file.write(text1)" to
"text_file.notes_ent.get(1.0, END)

James

Or rather
5. change "text_file.write(text1)" to
"text_file.write(self.notes_ent.get(1.0, END))"
 
S

Steve Holden

[...]
[James second-guesses himself twice]
Thank you, that worked very well.

I thought it was particularly helpful of James to do the debugging for
you without waiting for you to point out the errors in his first and
second submissions. You just don't *get* help like that most places
nowadays.

regards
Steve
 
S

Steve Holden

[...]
[James second-guesses himself twice]
Thank you, that worked very well.

I thought it was particularly helpful of James to do the debugging for
you without waiting for you to point out the errors in his first and
second submissions. You just don't *get* help like that most places
nowadays.

regards
Steve
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top