How to set the text/value/content of an `Entry` widget using a button in tkinter
You can choose between the following two methods to set the text of an Entry
widget. For the examples, assume imported library import tkinter as tk
and root window root = tk.Tk()
.
Method A: Use
delete
andinsert
Widget
Entry
provides methodsdelete
andinsert
which can be used to set its text to a new value. First, you'll have to remove any former, old text fromEntry
withdelete
which needs the positions where to start and end the deletion. Since we want to remove the full old text, we start at0
and end at wherever the end currently is. We can access that value viaEND
. Afterwards theEntry
is empty and we can insertnew_text
at position0
.entry = tk.Entry(root) new_text = "Example text" entry.delete(0, tk.END) entry.insert(0, new_text)
Method B: Use
StringVar
You have to create a new
StringVar
object calledentry_text
in the example. Also, yourEntry
widget has to be created with keyword argumenttextvariable
. Afterwards, every time you changeentry_text
withset
, the text will automatically show up in theEntry
widget.entry_text = tk.StringVar() entry = tk.Entry(root, textvariable=entry_text) new_text = "Example text" entry_text.set(new_text)
Complete working example which contains both methods to set the text via
Button
:This window
is generated by the following complete working example:
import tkinter as tk def button_1_click(): # define new text (you can modify this to your needs!) new_text = "Button 1 clicked!" # delete content from position 0 to end entry.delete(0, tk.END) # insert new_text at position 0 entry.insert(0, new_text) def button_2_click(): # define new text (you can modify this to your needs!) new_text = "Button 2 clicked!" # set connected text variable to new_text entry_text.set(new_text) root = tk.Tk() entry_text = tk.StringVar() entry = tk.Entry(root, textvariable=entry_text) button_1 = tk.Button(root, text="Button 1", command=button_1_click) button_2 = tk.Button(root, text="Button 2", command=button_2_click) entry.pack(side=tk.TOP) button_1.pack(side=tk.LEFT) button_2.pack(side=tk.LEFT) root.mainloop()
You might want to use insert
method. You can find the documentation for the Tkinter Entry Widget here.
This script inserts a text into Entry
. The inserted text can be changed in command
parameter of the Button.
from tkinter import *
def set_text(text):
e.delete(0,END)
e.insert(0,text)
return
win = Tk()
e = Entry(win,width=10)
e.pack()
b1 = Button(win,text="animal",command=lambda:set_text("animal"))
b1.pack()
b2 = Button(win,text="plant",command=lambda:set_text("plant"))
b2.pack()
win.mainloop()
If you use a "text variable" tk.StringVar()
, you can just set()
that.
No need to use the Entry delete and insert. Moreover, those functions don't work when the Entry is disabled or readonly! The text variable method, however, does work under those conditions as well.
import Tkinter as tk
...
entry_text = tk.StringVar()
entry = tk.Entry( master, textvariable=entry_text )
entry_text.set( "Hello World" )