![]() |
|
[Tkinter] moniter which widget triggerd event - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: [Tkinter] moniter which widget triggerd event (/thread-24840.html) |
moniter which widget triggerd event - catlessness - Mar-06-2020 I use tkinter and have several entries now i'm using frame.bind('<Key>',func)to monitor event,Q:can this function func tell me which entry had been changed and point a variable to it like: window=tk.Window()
frame=tk.Frame(window)
def func():
pointer={an entry that has been changed}
a=tk.Entry(...)
b=tk.Entry(...)
c=tk.Entry(...)
frame.bind('<Key>',func)Thank you!!!
RE: moniter which widget triggerd event - Larz60+ - Mar-07-2020 Please post a snippet that we can be run. RE: moniter which widget triggerd event - catlessness - Mar-07-2020 the problem is I dont really know if there is this function to focus on the entry changed, this is the closest i can give: import tkinter as tk
window=tk.Tk()
window.geometry('450x500')
frame=tk.Frame(window,height=500,width=500)
frame.place(x=0,y=0)
def func(var):
print('the following one is the problem, i dont know if it has this function')
#pointer={an entry that has been changed}
a=tk.Entry(frame,show=None,textvariable=tk.StringVar(value=1))
b=tk.Entry(frame,show=None,textvariable=tk.StringVar(value=2))
c=tk.Entry(frame,show=None,textvariable=tk.StringVar(value=3))
a.place(x=20,y=20)
b.place(x=20,y=40)
c.place(x=20,y=60)
window.bind('<Key>',func)
window.mainloop()
RE: moniter which widget triggerd event - Larz60+ - Mar-07-2020 in the bind statement, <key> needs to be replaced with what you want to bind to, and func needs to be replaces with the name of a function that you want to run when the event occurs. Since you are not using a class, the 'func' must be defined with a 'def' prior to the bind statement which you have done. you need to capture the event as an attribute of 'func' (I'd choose a better name here) and finally the bind must be for a widget, not a window assume you wanted to use left mouse button to bind to Entry a when enter button is pressed, the statement should look like: a.bind('<Return>', func)
RE: moniter which widget triggerd event - catlessness - Mar-07-2020 I actually want to monitor any key event, and on any entry in the window, that why i used '<Key>' and window.bind() the purpose is to run a parameter assignment function whenever there are values(in the entry) changed. But there are different functions when some special entries changed, thats why i need to know which entry changed. RE: moniter which widget triggerd event - Larz60+ - Mar-07-2020 OK, misunderstood. see example here: https://effbot.org/tkinterbook/tkinter-events-and-bindings.htm section: Capturing keyboard events |