2010-09-21 4 views
6

Ist es möglich, Tcl-Prozeduren aufzurufen, die Funktionszeiger (oder Callback-Funktionen) von Python haben? Ich benutze Tkinter, um Tcl-Prozeduren von Python aufzurufen.Aufrufen von Tcl-Prozeduren mit Funktionszeigern als Argument aus 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 
} 

Hinweis kann ich nicht Tcl-Code als eine externe Bibliothek meiner Anwendung ändern.

// Hemanth

Antwort

7

Ja, und Ihr Pseudo-Code ist ziemlich nah dran. Sie müssen Ihren Python-Code beim Tcl-Interpreter registrieren. Dadurch wird ein Tcl-Befehl erstellt, der den Python-Code aufruft. Sie verweisen dann auf diesen neuen tcl-Befehl, wenn Sie ihn an eine Tcl-Prozedur übergeben, die einen Prozedurnamen erwartet. Es geht ungefähr so:

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) 

Ein kleines bisschen Dokumentation ist hier:

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

+0

Dank !!! Ihr Dokumentationslink ist auch zu nützlich. – Hemanth

Verwandte Themen