Question

Comment appelez-vous un événement tkinter à partir d'un objet séparé?

Je recherche quelque chose comme wxWidgets wx.CallAfter . Par exemple, si je crée un objet et que je lui passe mon instance racine Tk , puis que j'essaie d'appeler une méthode de cette fenêtre racine à partir de mon objet, mon application se verrouille.

Le mieux que je puisse trouver consiste à utiliser la méthode après et à vérifier le statut de mon objet séparé, mais cela semble inutile.

Était-ce utile?

La solution

Pour répondre à la question "Comment appelez-vous un événement TkInter à partir d'un objet séparé", utilisez la commande event_generate . Il vous permet d’injecter des événements dans la file d’événements de la fenêtre racine. Combiné au puissant mécanisme d'événement virtuel de Tk, il devient un mécanisme de transmission de messages très pratique.

Par exemple:

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")

Notez que l'appel event_generate sera immédiatement renvoyé. Ce n'est pas clair si c'est ce que vous voulez ou non. En règle générale, vous ne souhaitez pas qu'un programme basé sur des événements bloque l'attente d'une réponse à un événement spécifique, car il gèlera l'interface graphique .

Je ne sais pas si cela résoudra votre problème cependant; sans voir votre code, je ne sais pas quel est votre problème réel. Je peux, par exemple, accéder aux méthodes de root dans le constructeur d'un objet où la racine est transmise sans que l'application ne soit bloquée. Cela me dit qu'il y a autre chose dans votre code.

Voici un exemple d'accès aux méthodes d'une fenêtre racine à partir d'un autre objet:

from tkinter import *

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

root = Tk()
newObj = myClass(root)

Autres conseils

Ci-dessous, quelques documents et liens permettant de mieux comprendre la réponse de Bryan ci-dessus.

Description de la fonction à partir de New Mexico Tech :

w.event_generate (sequence, ** kw)

  

Cette méthode provoque le déclenchement d’un événement sans stimulus externe. Le traitement de l'événement est le même que s'il avait été déclenché par un stimulus externe. L'argument de séquence décrit l'événement à déclencher. Vous pouvez définir des valeurs pour les champs sélectionnés dans l'objet Event en fournissant des arguments mot-clé = valeur, le mot-clé spécifiant le nom d'un champ dans l'objet Event.

liste et description des attributs d'événement tcl / tk ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top