2010-09-21 14 views
6

È possibile chiamare le procedure Tcl che hanno funzioni di puntatore (o funzioni di callback) da Python? Sto usando Tkinter per chiamare le procedure Tcl da Python.Chiamare le procedure Tcl con i puntatori di funzione come argomento da 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 
} 

Nota Non posso modificare il codice Tcl come una libreria esterna alla mia domanda.

// Hemanth

risposta

7

Sì, e il vostro pseudocodice è abbastanza vicino. Devi registrare il tuo codice Python con l'interprete Tcl. Questo creerà un comando tcl che chiamerà il tuo codice Python. Quindi fai riferimento a questo nuovo comando tcl ogni volta che lo passi a una procedura Tcl che si aspetta un nome di procedura. E 'più o meno così:

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 po' di documentazione è qui:

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

+0

Grazie !!! Anche il tuo link alla documentazione è troppo utile. – Hemanth

Problemi correlati