2010-09-21 30 views
6

Có thể gọi thủ tục Tcl có con trỏ hàm (hoặc hàm gọi lại) từ Python không? Tôi đang sử dụng Tkinter để gọi thủ tục Tcl từ Python.Gọi thủ tục Tcl với các con trỏ Hàm làm đối số từ 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 
} 

Lưu ý tôi không thể sửa đổi mã Tcl như mình một thư viện bên ngoài để ứng dụng của tôi.

// Hemanth

Trả lời

7

Có, và mã giả của bạn khá gần. Bạn phải đăng ký mã python của bạn với trình thông dịch Tcl. Điều này sẽ tạo ra một lệnh tcl sẽ gọi mã python của bạn. Sau đó, bạn tham chiếu lệnh tcl mới này bất cứ khi nào bạn chuyển nó tới một thủ tục Tcl, dự kiến ​​một tên thủ tục. Nó đi một cái gì đó như thế này:

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) 

Một chút nhỏ của tài liệu là ở đây:

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

+0

Cảm ơn !!! Liên kết tài liệu của bạn cũng hữu ích. – Hemanth

Các vấn đề liên quan