¿Cómo utilizar el comportamiento de bindtag por defecto como métodos?

Estoy tratando de invocar el comportamiento predeterminado del widget bajo demanda. Sobre la base de esta respuesta , sé un poco sobre las tags de enlace y las listas de tags

Digamos, por ejemplo, que tengo dos botones, y quiero tener el comportamiento de enlazar tags de un elemento específico en su lista de tags, del primer botón, siempre que haga clic izquierdo en el botón derecho:

import tkinter as tk root = tk.Tk() first_btn = tk.Button(root, text="1st") second_btn = tk.Button(root, text="2nd") second_btn.bind("", "expect the bindtag operation here") first_btn.pack() second_btn.pack() root.mainloop() 

No he especificado el command=... para first_btn ya que necesito tener el mismo efecto de presionar un botón, por ejemplo, con mi enlace second_btn .


o como otro ejemplo, quiero tener second_btn para invocar todas las devoluciones de llamada de first_btn (idealmente de mi elección) de first_btn :

 import tkinter as tk root = tk.Tk() first_btn = tk.Button(root, text="1st") second_btn = tk.Button(root, text="2nd", command="first_btn bindtag callbacks") first_btn.pack() second_btn.pack() root.mainloop() 

O, ¿cuáles son los nombres de referencia (si los hay) a las operaciones asociadas a bindtags?

Para invocar el callback vinculado a una secuencia dada (por ejemplo, ), puede hacer widget.event_generate(, **kwargs) . Los argumentos de palabras clave opcionales pueden ser x=0 , y=0 para un evento por ejemplo. Esto activará todas las devoluciones de llamada asociadas con la secuencia (no importa si se vincularon con bind , bind_class o bind_all ).

En el siguiente ejemplo, cuando se hace clic en el segundo botón, se reduce el primero como si se hubiera hecho clic también:

 import tkinter as tk root = tk.Tk() first_btn = tk.Button(root, text="1st") second_btn = tk.Button(root, text="2nd", command=lambda: first_btn.event_generate('')) first_btn.pack() second_btn.pack() root.mainloop() 

Sin embargo, al realizar pruebas de forma interactiva desde la línea de comandos, la generación de eventos de teclado a menudo no funciona porque el widget no tiene el foco del teclado. Entonces, con el siguiente código, al hacer clic en el botón, el menú View se abrirá como si hubiéramos hecho Alt+v :

 import tkinter as tk root = tk.Tk() menubar = tk.Menu(root) viewMenu = tk.Menu(menubar, tearoff=0) viewMenu.add_command(label="Item 1") viewMenu.add_command(label="Item 2") menubar.add_cascade(menu=viewMenu, label="View", underline=0) root.config(menu=menubar) tk.Button(root, text='Test', command=lambda: root.event_generate('')).pack() root.mainloop() 

Pero cuando hago root.event_generate('') desde el IPython QtConsole, no pasa nada. La solución es forzar el enfoque del teclado antes de generar el evento:

 root.focus_force() root.event_generate('')