Tkinter. Press Enter in Entry box. Append to Text box. How?

13,866

So you're using a tkinter.Text box, which supports the .insert method. Let's use it!

def __init__(self,form):

# Lots of your code is duplicated here, so I'm just highlighting the main parts

    button1 = Button(form, text='Button1', command = self.addchat)
    self.textbox = textbox1 # to make it accessible outside your __init__
    self.textarea = textarea1 # see above

    form.bind("<Return>", lambda x: self.addchat())
    # this is the magic that makes your enter key do something

def addchat(self):
    txt = self.textbox.get()
    # gets everything in your textbox
    self.textarea.insert(END,"\n"+txt)
    # tosses txt into textarea on a new line after the end
    self.textbox.delete(0,END) # deletes your textbox text
Share:
13,866
suchislife
Author by

suchislife

Updated on June 06, 2022

Comments

  • suchislife
    suchislife about 2 years

    I am making a chat program and decided to use Tkinter for the interface.

    What I wanna do is a breeze in C# but Tkinter is new to me.

    Basically I have a form with a Entry control and a Text control.

    I want to know how to append text from the Entry control to the Text control after the user presses Enter.

    Here's my code so far:

    from tkinter import *
    
    class Application:
    
        def hello(self):
            msg = tkinter.messagebox.askquestion('title','question')
    
        def __init__(self, form):
            form.resizable(0,0)
            form.minsize(200, 200)
            form.title('Top Level')
    
            # Global Padding pady and padx
            pad_x = 5
            pad_y = 5
    
            # create a toplevel menu
            menubar = Menu(form)
            #command= parameter missing.
            menubar.add_command(label="Menu1")
            #command= parameter missing.
            menubar.add_command(label="Menu2")
            #command= parameter missing.
            menubar.add_command(label="Menu3")
    
            # display the menu
            form.config(menu=menubar)
    
            # Create controls
    
            label1 = Label(form, text="Label1")
            textbox1 = Entry(form)
            #command= parameter missing.
            button1 = Button(form, text='Button1')
    
            scrollbar1 = Scrollbar(form)
            textarea1 = Text(form, width=20, height=10)
    
            textarea1.config(yscrollcommand=scrollbar1.set)
            scrollbar1.config(command=textarea1.yview)
    
            textarea1.grid(row=0, column=1, padx=pad_x, pady=pad_y, sticky=W)
            scrollbar1.grid(row=0, column=2, padx=pad_x, pady=pad_y, sticky=W)
            textbox1.grid(row=1, column=1, padx=pad_x, pady=pad_y, sticky=W)
            button1.grid(row=1, column=2, padx=pad_x, pady=pad_y, sticky=W)
    
            form.mainloop()
    
    root = Tk()
    Application(root)
    
  • suchislife
    suchislife over 10 years
    Sweet! Just a quick follow up question. How would you keep the user from posting blank entries to the text area?
  • Adam Smith
    Adam Smith over 10 years
    after txt = self.textbox.get(), do if not txt: return. Alternatively do if txt: and indent the rest of the function.
  • ArtOfWarfare
    ArtOfWarfare over 9 years
    Why the lambda x:? You can also just bind to self.addchat and then change def addchat to include an optional parameter of event, using def addchat(self, event = None):. Your lambda x: just catches the event and throws it away with the unused variable x. If you're going to insist on throwing it away, at least use the more Pythonic name for an explicitly ignored variable of _.