Pregunta

¿Cómo se invoca un tkinter event desde un objeto separado?

Estoy buscando algo como wxWidgets wx.CallAfter . Por ejemplo, si creo un objeto y le paso mi instancia raíz Tk , y luego intento llamar a un método de esa ventana raíz desde mi objeto, mi aplicación se bloquea.

Lo mejor que se me ocurre es usar el método after y verificar el estado de mi objeto separado, pero parece un desperdicio.

¿Fue útil?

Solución

Para responder a su pregunta específica de " ¿Cómo invocar un evento TkInter desde un objeto separado? " ;, use el comando event_generate . Le permite inyectar eventos en la cola de eventos de la ventana raíz. Combinado con el poderoso mecanismo de evento virtual de Tk, se convierte en un práctico mecanismo para pasar mensajes.

Por ejemplo:

from tkinter import *

def doFoo(*args):
    print("Hello, world")

root = Tk()
root.bind("<<Foo>>", doFoo)

# some time later, inject the "<<Foo>>" virtual event at the
# tail of the event queue
root.event_generate("<<Foo>>", when="tail")

Tenga en cuenta que la llamada event_generate volverá de inmediato. No está claro si eso es lo que quieres o no. En términos generales, no desea que un programa basado en eventos bloquee la espera de una respuesta a un evento específico porque congelará la GUI .

No estoy seguro si esto resuelve su problema; sin ver su código, no estoy seguro de cuál es su verdadero problema. Puedo, por ejemplo, acceder a métodos de root en el constructor de un objeto donde se pasa la raíz sin que la aplicación se bloquee. Esto me dice que hay algo más en tu código.

Aquí hay un ejemplo de acceso exitoso a métodos en una ventana raíz desde algún otro objeto:

from tkinter import *

class myClass:
    def __init__(self, root):
        print("root background is %s" % root.cget("background"))

root = Tk()
newObj = myClass(root)

Otros consejos

Aquí abajo, solo algunos documentos y enlaces para comprender mejor la respuesta de Bryan arriba.

descripción de la función de New Mexico Tech :

w.event_generate (secuencia, ** kw)

  

Este método hace que un evento se dispare sin ningún estímulo externo. El manejo del evento es el mismo que si hubiera sido provocado por un estímulo externo. El argumento de secuencia describe el evento que se activará. Puede establecer valores para los campos seleccionados en el objeto Evento proporcionando argumentos de palabra clave = valor, donde la palabra clave especifica el nombre de un campo en el objeto Evento.

lista y descripción de los atributos del evento tcl / tk aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top