Python TKinter binding to enter key
I've made some changes to your code, labeling the comments T3
for visibility. This allows you to use Return on the Buttons
and Text
field, with the "connect" button "rescuing" focus, in effect.
from Tkinter import *class MyApp: def __init__(self, parent): #------ constants for controlling layout of buttons ------ button_width = 15 button_padx = "2m" button_pady = "1m" buttons_frame_padx = "3m" buttons_frame_pady = "0m" buttons_frame_ipadx = "3m" buttons_frame_ipady = "0m" # -------------- end button constants ---------------- # First declare ORIGINAL Window area self.myParent = parent self.myParent.geometry("640x400") # Layer ONE ### Our First layer/frame is called frameLayerOne self.frameLayerOne = Frame(parent, bg="green") self.frameLayerOne.pack(expand=YES, fill=BOTH) ### We will stack vertically inside frameLayerOne. ### Inside frameLayerOne, we will create ### a menu_frame, then a sub frame into which we will ### put an output_frame and an input_frame. # Layer TWO # MENU FRAME - Layer Two self.menu_frame = Frame(self.frameLayerOne, borderwidth=5, relief=RIDGE, bg="cyan") self.menu_frame.pack(side=TOP, expand=NO, padx=0, pady=0, ipadx=0, ipady=0, fill=X) MessageMenuFrame="Menu frame.\n" # Label(self.menu_frame, text=MessageMenuFrame, justify=LEFT).pack(side=TOP, anchor=W) # buttons frame self.buttons_frame = Frame(self.menu_frame) # , bg="red" self.buttons_frame.pack(side=TOP, ipadx=buttons_frame_ipadx, ipady=buttons_frame_ipady, padx=buttons_frame_padx, pady=buttons_frame_pady,) # now we add the buttons to the buttons_frame self.button1 = Button(self.buttons_frame, command=self.button1Click) self.button1.configure(text="CONNECT", background= "green") self.button1.focus_force() self.button1.configure(width=button_width, padx=button_padx, pady=button_pady) self.button1.pack(side=LEFT) # T3 - bound to regular button1Click self.button1.bind("<Return>", self.button1Click) self.button2 = Button(self.buttons_frame, command=self.button2Click) self.button2.configure(text="QUIT", background="red") self.button2.configure(width=button_width, padx=button_padx, pady=button_pady) self.button2.pack(side=RIGHT) # T3 - bound to regular button2Click self.button2.bind("<Return>", self.button2Click) # SUB FRAME - Layer Two self.sub_frame = Frame(self.frameLayerOne) # , bg="red" self.sub_frame.pack(side=BOTTOM, expand=YES, padx=0, pady=0, ipadx=0, ipady=0, fill=BOTH) # Layer THREE # INPUT FRAME - Layer Three self.input_frame = Frame(self.sub_frame, borderwidth=5, relief=RIDGE, bg="black") self.input_frame.pack(side=BOTTOM, expand=NO, padx=0, pady=0, ipadx=0, ipady=0, fill=X) # Text widget for user input to send to server self.InputText = Text(self.input_frame, height=4, bg="black", fg="green") self.InputText.pack() self.InputText.insert(END, "User input here") self.InputText.bind('<Return>', self.return_key) # OUTPUT FRAME - Layer Three self.output_frame = Frame(self.sub_frame, borderwidth=5, relief=RIDGE, bg="blue") self.output_frame.pack(side=BOTTOM, expand=YES, padx=0, pady=0, ipadx=5, ipady=25, fill=BOTH) # Text widget for output from code and server self.OutputText = Text(self.output_frame, bg="black", fg="green") self.OutputText.pack() self.OutputText.insert(END, "server and code output here") def return_key(self, event): text = "you pressed Return" self.InputText.insert(END, text) def button1Click(self, event=None): # T3 - give it a default event of None if self.button1["background"] == "green": self.button1["background"] = "yellow" else: self.button1["background"] = "green" self.button1.focus_set() # T3 - set focus to this button so Return works def button2Click(self, event=None): # T3 - give it a default event of None self.myParent.destroy()root = Tk()myapp = MyApp(root)root.mainloop()