I'm trying to make a entry value increase or decrease whenever the up or down arrow key is pressed. To do this i need to first find which entry that's in focus, and i'm trying to do that ".focus_get()". The problem is that i can't figure out how it works or what its returning. It is returning 1 unique number for each entry, something like: ".45191744" but this number changes each time i run the program. The following numbers is for the last 5 attempts, when running the code. ".50518728" ".53009096" ".55889592" ".51891896"
How can i get the variable name of the focused entry?
Here is my code:
def get_focus1(event):
print("return: event.widget is", event.widget)
print("focus is:", window2.focus_get())
print(window2.focus_get())
print(help(window2.Entry))
window2 = Tk()
eyear1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for year
eyear1.insert(10, defaultYear)
eyear1.grid(row=1, column=1)
emonth1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for Month
emonth1.insert(10, defaultMonth)
emonth1.grid(row=1, column=2)
eday1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for day
eday1.insert(10, defaultDay)
eday1.grid(row=1, column=3)
window2.bind('<Left>', get_focus1)
mainloop()
focus_get
returns the actual object. What you want to do, assuming your not using (see Bryan's comment), is to clear the text and re-write the new value (do some validation obviously). What you end up is something like this:textvariable
for a good reason
from tkinter import *
def up(event):
# warning, exceptions can happen
old = int(event.widget.get()) # this gives back the actual object!
event.widget.delete(0, END) # delete existing text
event.widget.insert(10, old + 1) # put new text in
def down(event):
# warning, exceptions can happen
old = int(event.widget.get()) # this gives back the actual object!
event.widget.delete(0, END) # delete existing text
event.widget.insert(10, old - 1) # put new text in
window2 = Tk()
eyear1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for year
eyear1.insert(10, 2015)
eyear1.grid(row=1, column=1)
emonth1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for Month
emonth1.insert(10, 1)
emonth1.grid(row=1, column=2)
eday1 = Entry(window2, width=4, font=("Helvetica", 16)) # Entry for day
eday1.insert(10, 10)
eday1.grid(row=1, column=3)
# bind both keys to corresponding event handlers
window2.bind('<Up>', up)
window2.bind('<Down>', down)
mainloop()
Remember that when you call print, you are getting the representation of an object, not necessarily the object itself. To show you what's going on, add this to your get_focus1
function:
print("focus object class:", window2.focus_get().__class__)
You should see that it is indeed returning a reference to an Entry
widget, meaning you can call all the normal methods on that object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With