2010-03-25 8 views
6

elmer से Tcl फ़ंक्शंस तक पहुंचने के लिए उदाहरण Tcl से Python कोड चलाने में सक्षम बनाता है। दूसरी तरफ के बारे में क्या? क्या कोई पाइथन में एक उदाहरण दे सकता है?पायथन

अद्यतन: इस मेरा मतलब है, के बजाय, Tcl वस्तुओं का उपयोग Tcl कार्यों आह्वान, आदि करने में सक्षम होने से बस कुछ Tcl कोड चल रहा है।

उत्तर

4

आप पाइथन टिंकर मानक मॉड्यूल पर एक नज़र डाल सकते हैं, यह यूआई के लिए बाध्यकारी है, लेकिन यह पृष्ठभूमि में टीसीएल कोड निष्पादित करता है।

+1

जैसे चर्चा में टीईएल में पाइथन कार्यों को निर्यात कर सकते हैं। Tkinter आयात से *; रूट = रुपये(); root.tk.eval ('डालता है [सरणी tcl_platform] मिलता है'); –

+0

@ कोलिन - जैसा कि सवाल है "टीसीएल ऑब्जेक्ट्स तक पहुंचने में सक्षम होने के कारण, टीसीएल फ़ंक्शन इत्यादि का आह्वान करने में सक्षम होना ..", क्या आपका उदाहरण पायथन में उस टीसीएल सरणी के संदर्भ में नहीं लिखा जाना चाहिए (स्ट्रिंग प्रस्तुति को पुनर्प्राप्त करने के बजाय मुद्रित क्या है)? –

+1

ठीक है मैंने आपको विचार देने के लिए अभी एक त्वरित टिप्पणी जोड़ा है। मुझे यह भी संदेह है कि पाइथन <-> टीसीएल संचार शायद पासिंग कमांड के स्तर पर होना चाहिए और वैसे भी परिणाम प्राप्त करना होगा, मैं उम्मीद नहीं करता कि वे डेटा संरचनाओं को साझा करने में सक्षम हों। –

-3

यह?

import subprocess 
subprocess.Popen("tclsh someFile.tcl", shell=True) 
+0

नहीं, कृपया उस स्पष्टीकरण को पढ़ें जिसे मैंने अभी प्रश्न में जोड़ा है। –

+1

इस मामले में खोल का उपयोग करने की कोई आवश्यकता नहीं है। 'subprocess.Popen ([" tclsh "," someFile.tcl "]) 'ठीक काम करता है। –

1

यह कुछ कस्टम पायथन वस्तु प्रकार है कि चादर सी स्तर Tcl_Obj * की पारदर्शी रूप से, सामान्य स्थिति सिर्फ तार आगे पीछे Tcl के EIAs अर्थ विज्ञान के रूप में आदान प्रदान किया जाता है प्रदान हर दूसरे दूर टिमटिमाना कर सकते हैं द्वारा सिद्धांत में संभव हो सकता है आंतरिक प्रतिनिधित्व स्वतंत्र रूप से।

तो हाँ, आप तारों से बेहतर कर सकते हैं, लेकिन यह आमतौर पर इसके लायक नहीं है। Tkinter पहले से ही में बनाया संभव अनुकूलन के कुछ ही है, इसलिए वहाँ चोरी करने की कोशिश ...

7

यह एक नहीं बल्कि पुराने धागा है, लेकिन मैं हाल ही में Tkinter.Tcl() जो आप बिना अजगर में एक Tcl दुभाषिया लिए सीधी पहुँच देता पर ठोकर खाई Tkinter.Tk() के रूप में एक जीयूआई को बढ़ाने के लिए की आवश्यकता है।

एक उदाहरण ... मान लीजिए आप main कहा जाता है एक proc के साथ एक Tcl फ़ाइल (foo.tcl) है कि एक तर्क के रूप में एक एकल फ़ाइल नाम की आवश्यकता है ... main एक स्ट्रिंग foo.tcl पढ़ने से प्राप्त देता है।

from Tkinter import Tcl 

MYFILE = 'bar.txt' 
tcl = Tcl() 
# Execute proc main from foo.tcl with MYFILE as the arg 
tcl.eval('source foo.tcl') 
tcl_str = tcl.eval('main %s' % MYFILE) 
# Access the contents of a Tcl variable, $tclVar from python 
tcl.eval('set tclVar foobarme') 
tclVar = tcl.eval('return $tclVar') 

मैं के अलावा एक वापसी मान के माध्यम से अजगर से Tcl वस्तुओं का उपयोग करने के लिए एक और रास्ता नहीं मिला है, लेकिन यह आप Tcl procs के साथ इंटरफेस के लिए एक रास्ता देती है। इसके अलावा, आप Using Python functions in Tkinter.Tcl()