2010-09-21 10 views
6

से तर्क के रूप में फ़ंक्शन पॉइंटर्स के साथ टीसीएल प्रक्रियाओं को कॉल करना क्या टीसीएल प्रक्रियाओं को कॉल करना संभव है जिनमें पाइथन से फ़ंक्शन पॉइंटर्स (या कॉलबैक फ़ंक्शंस) हैं? मैं पायथन से टीसीएल प्रक्रियाओं को कॉल करने के लिए टिंकर का उपयोग कर रहा हूं।पायथन

अजगर स्निपेट:

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

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

Tcl स्निपेट:

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

नोट मैं Tcl कोड इसकी के रूप में एक बाहरी पुस्तकालय अपने आवेदन करने के लिए संशोधित नहीं कर सकते।

// हेमंत

उत्तर

7

हाँ, और अपने स्यूडोकोड बहुत करीब है। आपको अपने पाइथन कोड को टीसीएल दुभाषिया के साथ पंजीकृत करना होगा। यह एक टीसीएल कमांड बनाएगा जो आपके पायथन कोड को कॉल करेगा। जब भी आप एक टीसीएल प्रक्रिया में पास करते हैं तो प्रक्रिया के नाम की अपेक्षा करते समय आप इस नए टीसीएल कमांड का संदर्भ लेंगे। यह कुछ इस तरह चला जाता है:

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

+0

धन्यवाद !!! आपका दस्तावेज लिंक भी बहुत उपयोगी है। – Hemanth