2010-03-25 20 views

Respuesta

4

Puede echar un vistazo al módulo estándar de python tkinter, es un enlace a la interfaz de usuario Tk, pero que ejecuta el código Tcl en el fondo.

+1

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

+0

@Colin - como la pregunta dice "poder acceder a objetos Tcl, invocar funciones Tcl, etc.", no debería escribirse su ejemplo para obtener referencia a esa matriz Tcl en Python (en lugar de recuperar la representación de cadena de lo que está impreso)? –

+1

Bueno, acabo de agregar un comentario rápido para darle la idea. También sospecho que la comunicación Python <-> Tcl probablemente tendrá que estar al nivel de pasar los comandos y obtener resultados como cadenas de todos modos, no esperaría que pudieran compartir estructuras de datos. –

-3

Esto?

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

No, lea la aclaración que acabo de agregar a la pregunta. –

+1

No es necesario usar el shell en este caso. 'subprocess.Popen ([" tclsh "," someFile.tcl "])' funciona bien. –

1

Aunque podría ser posible en teoría, proporcionando algunos tipos de objetos de Python a medida que el nivel de envoltura C Tcl_Obj * 's transparente, el caso general es simplemente intercambiando las cadenas de ida y vuelta como la semántica de EIAS de Tcl puede brillar de distancia cada dos representación interna libremente.

Así que sí, podría ser mejor que las cadenas, pero por lo general no vale la pena. Tkinter ya cuenta con algunas de las posibles optimizaciones incorporadas, a fin de tratar de robar allí ...

7

Este es un hilo bastante antiguo, pero recientemente me encontré con Tkinter.Tcl() que le da acceso directo a un intérprete de Tcl en Python sin tener que generar una GUI Tk como Tkinter.Tk() requiere.

Un ejemplo ... supongamos que tiene un archivo Tcl (foo.tcl) con un proc llamado main que requiere un solo nombre de archivo como un argumento ... main devuelve una cadena derivada de la lectura 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') 

no he encontrado otra manera de acceder a los objetos de Tcl pitón, además de a través de un valor de retorno, pero esto le dará una forma de interactuar con procsos Tcl. Además, puede exportar funciones de Python a Tcl como se discutió en Using Python functions in Tkinter.Tcl()

Cuestiones relacionadas