TypeError: printName1 () toma 0 argumentos posicionales pero se le dio 1

Así que tengo esta cosa muy simple que escribí y me está matando tratando de averiguar por qué no funciona. Todo lo que hace es imprimir una statement al hacer clic.

Entonces, para el primer ejemplo, tenía un botón y le printName1 la función printName1 directamente, lo que funcionó perfectamente bien.

Luego, lo siguiente fue .bind() usando la función .bind() . Entonces, en este caso, solo tenemos un marco que imprime ciertas cosas según el botón que presiona. Pero desafortunadamente cada vez que uso el enlace, arroja el error que se muestra arriba. Referencias tkinter\__init__.py para el error, por lo que no es algo directamente en mi código, pero tal vez deba hacerse de manera diferente. Gracias chicos.

 from tkinter import * root = Tk() def printName1(): print('Jack') def printName2(): print('John') def printName3(): print('Jill') frame = Frame(root, width=300, height=250) frame.bind("", printName1) frame.bind("", printName2) frame.bind("", printName3) frame.pack() root.mainloop() 

EDIT: El error es confuso porque hizo parecer que había un argumento adicional cuando debería haber 0. Pero en realidad necesitaba agregar un argumento a las funciones y eso fue un evento. por lo que debería ser def printName1 (evento) y así sucesivamente. Me imaginé que les haría saber lo que funcionó para mí en caso de que alguien se tope con esto.

Si consulta la documentación relativa a los eventos y enlaces tkinter , verá que cuando se activa un evento, el objeto del evento asociado se pasará como el primer (y único) argumento a la función acotada (siendo printName1 y amigos en su caso) .

Entonces, lo que debe hacer es modificar esas funciones printName* para aceptar el argumento del evento.

 def printName1(event): print('Jack') 

Entonces, lo que deseas lograr debería funcionar.

Naturalmente, puede hacer que el argumento del event opcional como sugirió @ TigerhawkT3.

Los eventos, como los del teclado / mouse, se envían a la aplicación con información sobre el evento: qué tecla era esa, dónde estaba el mouse cuando hizo clic, ese tipo de cosas. Esto significa que cualquier callback vinculada a tal evento necesita tomar un argumento. Si también desea vincularlo a un Button Tkinter, que no tiene un evento, puede manejarlo también. Solo define tus funciones con un argumento predeterminado:

 def printName1(event=None): ...