I am writing a tkinter app in python 3.12.0 (on windows) and I want to bind the other "Enter" (Which is in Num-Lock part of keyboard) that when I press it, send my message.I am using a Text Widget and I need the main Enter for break line.I hove solved my problem with beneath code and it works on my system; But I'm looking for a better solution and I don't know if this function works on other systems or even if it works on a different OS.
def foo(event=None):if not (event.keysym=="Return" and event.state in [ 262144, # Caps Lock Off, Num Lock Off, Scroll Lock Off 262146, # Caps Lock On , Num Lock Off, Scroll Lock Off 262152, # Caps Lock Off, Num Lock On , Scroll Lock Off 262154, # Caps Lock On , Num Lock On , Scroll Lock Off 262176, # Caps Lock Off, Num Lock Off, Scroll Lock On 262178, # Caps Lock On , Num Lock Off, Scroll Lock On 262184, # Caps Lock Off, Num Lock On , Scroll Lock On 262186, # Caps Lock On , Num Lock On , Scroll Lock On ]): return# do the code
My problem is already solved. I just want to know is there a better way to bind the other "Enter"?
Edit:As I told in the first place: I want to use only the second Enter button and I think I couldn't get my point across.
Here is my code:
import tkinter as tkdef foo(event=None): print(event) print(event.state) # to bind only to other Enter, but not the main Enter: if event!=None and (not (event.keysym=="Return" and event.state in [ 262144, # Caps Lock Off, Num Lock Off, Scroll Lock Off 262146, # Caps Lock On , Num Lock Off, Scroll Lock Off 262152, # Caps Lock Off, Num Lock On , Scroll Lock Off 262154, # Caps Lock On , Num Lock On , Scroll Lock Off 262176, # Caps Lock Off, Num Lock Off, Scroll Lock On 262178, # Caps Lock On , Num Lock Off, Scroll Lock On 262184, # Caps Lock Off, Num Lock On , Scroll Lock On 262186, # Caps Lock On , Num Lock On , Scroll Lock On ])): return print("Yey!")root = tk.Tk()text = tk.Text(root, width=60, height=8)text.bind('<Key>', foo)text.pack()tk.Button(root, text='Send', command=foo).pack()root.mainloop()
Please check others' answers.