2010-09-21 3 views
6

Est-il possible d'appeler des procédures Tcl qui ont des pointeurs de fonction (ou des fonctions de rappel) à partir de Python? J'utilise Tkinter pour appeler les procédures Tcl à partir de Python.Appel de procédures Tcl avec des pointeurs de fonction en tant qu'argument à partir de Python

Python Snippet:

proc callbackFunc(): 
    print "I am in callbackFunc" 

cb = callbackFunc 
Tkinter.Tk.call('tclproc::RetrieveInfo', cb) 

Tcl Snippet:

proc tclproc::RetrieveInfo() { callback } { 
    eval $callback 
} 

Remarque Je ne peux pas modifier le code Tcl comme une bibliothèque externe à ma demande.

// Hemanth

Répondre

7

Oui, et votre pseudo-code est assez proche. Vous devez enregistrer votre code python avec l'interpréteur Tcl. Cela va créer une commande tcl qui appellera votre code python. Vous faites ensuite référence à cette nouvelle commande tcl chaque fois que vous la passez à une procédure Tcl qui attend un nom de procédure. Il va quelque chose comme ceci:

import Tkinter 
root=Tkinter.Tk() 

# create a python callback function 
def callbackFunc(): 
    print "I am in callbackFunc" 

# register the callback as a Tcl command. What gets returned 
# must be used when calling the function from Tcl 
cb = root.register(callbackFunc) 

# call a tcl command ('eval', for demonstration purposes) 
# that calls our python callback: 
root.call('eval',cb) 

Un tout petit peu de documentation est ici:

http://epydoc.sourceforge.net/stdlib/Tkinter.Misc-class.html#register

+0

Merci !!! Votre lien vers la documentation est également trop utile. – Hemanth

Questions connexes