Вызов процедур Tcl с указателями на функцию в качестве аргумента из Python - PullRequest
6 голосов
/ 21 сентября 2010

Можно ли вызывать процедуры Tcl, которые имеют указатели на функции (или функции обратного вызова) из Python?Я использую Tkinter для вызова процедур Tcl из Python.

Фрагмент Python:

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

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

Фрагмент Tcl:

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

Примечание. Я не могу изменить код Tcl как еговнешняя библиотека для моего приложения.

// Hemanth

1 Ответ

7 голосов
/ 22 сентября 2010

Да, и ваш псевдокод довольно близок.Вы должны зарегистрировать свой код Python с помощью интерпретатора Tcl.Это создаст команду tcl, которая будет вызывать ваш код Python.Затем вы ссылаетесь на эту новую команду tcl всякий раз, когда передаете ее в процедуру Tcl, которая ожидает имя процедуры.Это выглядит примерно так:

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)

Здесь есть небольшая часть документации:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...