2010-03-25 10 views

risposta

4

È possibile dare un'occhiata al modulo standard tkinter di Python, è un collegamento a Tk UI, ma che esegue il codice Tcl in background.

+1

Es. da Tkinter import *; root = Tk(); root.tk.eval ('puts [array get tcl_platform]'); –

+0

@Colin - come la domanda legge "essere in grado di accedere agli oggetti Tcl, richiamare le funzioni Tcl, ecc.", Non dovrebbe essere scritto il tuo esempio per ottenere un riferimento a tale array Tcl in Python (invece di recuperare la rappresentazione stringa di cosa è stampato)? –

+1

Bene, ho appena aggiunto un breve commento per darti l'idea. Inoltre sospetto che la comunicazione Tcl Python <-> dovrà probabilmente essere al livello dei comandi di passaggio e ottenere i risultati come stringhe in ogni caso, non mi aspetto che siano in grado di condividere strutture dati. –

-3

Questo?

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

No, per favore leggi i chiarimenti che ho appena aggiunto alla domanda. –

+1

In questo caso non è necessario utilizzare la shell. 'subprocess.Popen ([" tclsh "," someFile.tcl "])' funziona bene. –

1

Mentre potrebbe essere possibile in teoria, fornendo alcuni tipi di oggetti Python personalizzato che livello avvolgente C Tcl_Obj * s 'in modo trasparente, il caso generale è solo scambiando le stringhe avanti e indietro come la semantica VIA di Tcl possono brillare via ogni altra rappresentazione interna liberamente.

Quindi sì, si potrebbe fare meglio delle stringhe, ma di solito non ne vale la pena. Tkinter ha già alcune delle possibili ottimizzazioni integrate, quindi prova a rubare lì ...

7

Questo è un thread piuttosto vecchio, ma recentemente mi sono imbattuto in Tkinter.Tcl() che ti dà accesso diretto a un interprete Tcl in python senza dover generare una GUI Tk come Tkinter.Tk() richiede.

Un esempio ... supponga di avere un file di Tcl (foo.tcl) con un proc chiamato main che richiede un singolo nome di file come argomento ... main restituisce una stringa derivata dalla lettura 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') 

non ho trovato un altro modo per accedere agli oggetti Tcl da Python oltre che attraverso un valore di ritorno, ma questo ti dà un modo di interfacciarsi con procs Tcl. Inoltre, è possibile esportare le funzioni Python in Tcl come discusso in Using Python functions in Tkinter.Tcl()

Problemi correlati