Cómo manejar un evento de clic de botón

Solo estoy aprendiendo Python y tengo el concepto básico abajo, y ya hay algunos progtwigs de línea de comandos. Ahora estoy aprendiendo cómo crear GUIs con Tkinter.

Creé una GUI simple para aceptar cierta información de usuario de un widget de Entry , y luego, cuando el usuario hace clic en enviar, debería aparecer un cuadro de diálogo.

El diálogo debe pedir el nombre y el apellido .

El problema es que no sé cómo manejar el evento cuando el usuario hace clic en enviar.

Aquí está mi código:

 from Tkinter import * class GUI(Frame): def __init__(self,master=None): Frame.__init__(self, master) self.grid() self.fnameLabel = Label(master, text="First Name") self.fnameLabel.grid() self.fnameEntry = Entry(master) self.fnameEntry.grid() self.lnameLabel = Label(master, text="Last Name") self.lnameLabel.grid() self.lnameEntry = Entry(master) self.lnameEntry.grid() self.submitButton = Button(self.buttonClick, text="Submit") self.submitButton.grid() def buttonClick(self, event): """ handle button click event and output text from entry area""" pass if __name__ == "__main__": guiFrame = GUI() guiFrame.mainloop() 

Ya tenías tu función de evento. Solo corrige tu código a:

  """Create Submit Button""" self.submitButton = Button(master, command=self.buttonClick, text="Submit") self.submitButton.grid() def buttonClick(self): """ handle button click event and output text from entry area""" print('hello') # do here whatever you want 

Esto es lo mismo que en la respuesta de buttonClick() excepto que el método buttonClick() ahora está fuera del método de clase __init__ . La ventaja es que de esta manera puedes llamar a la acción programáticamente. Esta es la forma convencional en las GUI codificadas para OOP.

Debe especificar un controlador , o una función, que se llama al hacer clic en el botón. Puede hacer esto asignando el nombre (no llamando a la función) de la función al command de propiedad de su Botón.

Por ejemplo:

 self.submitButton = Button(self.buttonClick, text="Submit", command=buttonClick) 

Tenga en cuenta la ausencia de () al asignar buttonClick como la propiedad de command self.submitButton .

Tenga en cuenta que no necesita el segundo parámetro llamado event en su controlador / función buttonClick() .

Encontré una referencia bastante buena llamada Thinking in Tkinter , y la maté un poco. Intenté ajustarlo a lo que querías.

 from tkinter import * class GUI(Frame): def __init__(self,master=None): Frame.__init__(self, master) self.grid() self.fnameLabel = Label(master, text="First Name") self.fnameLabel.grid() self.fnameEntry = StringVar() self.fnameEntry = Entry(textvariable=self.fnameEntry) self.fnameEntry.grid() self.lnameLabel = Label(master, text="Last Name") self.lnameLabel.grid() self.lnameEntry = StringVar() self.lnameEntry = Entry(textvariable=self.lnameEntry) self.lnameEntry.grid() def buttonClick(): print("You pressed Submit!") print(self.fnameEntry.get() + " " + self.lnameEntry.get() +", you clicked the button!") self.submitButton = Button(master, text="Submit", command=buttonClick) self.submitButton.grid() if __name__ == "__main__": guiFrame = GUI() guiFrame.mainloop()