Verwenden von Python-Funktionen in Tkinter.Tcl ()
Ich habe eine Reihe von Python-Funktionen. Nennen wir siefoo
, bar
undbaz
. Sie akzeptieren eine variable Anzahl von String-Argumenten und erledigen andere anspruchsvolle Dinge (wie den Zugriff auf das Netzwerk).
Ich möchte, dass der "Benutzer" (nehmen wir an, er ist nur mit Tcl vertraut) mit diesen Funktionen Skripte in Tcl schreibt.
Hier ist ein Beispiel (entnommen aus Macports) dieser Benutzer kann kommen mit:
post-configure {
if {[variant_isset universal]} {
set conflags ""
foreach arch ${configure.universal_archs} {
if {${arch} == "i386"} {append conflags "x86 "} else {
if {${arch} == "ppc64"} {append conflags "ppc_64 "} else {
append conflags ${arch} " "
}
}
}
set profiles [exec find ${worksrcpath} -name "*.pro"]
foreach profile ${profiles} {
reinplace -E "s|^(CONFIG\[ \\t].*)|\\1 ${conflags}|" ${profile}
# Cures an isolated case
system "cd ${worksrcpath}/designer && \
${qt_dir}/bin/qmake -spec ${qt_dir}/mkspecs/macx-g++ -macx \
-o Makefile python.pro"
}
}
}
Hier,variant_issset
, reinplace
are so on (außer Tcl builtins) sind als Python-Funktionen implementiert.if
, foreach
, set
, etc .. sind normale Tcl-Konstrukte.post-configure
ist eine Python-Funktion, die einen Tcl-Codeblock akzeptiert, der später ausgeführt werden kann (was wiederum offensichtlich dazu führen würde, dass die oben genannten Python- "Funktionen" aufgerufen werden).
Ist das in Python möglich? Wenn das so ist, wie
from Tkinter import *; root= Tk(); root.tk.eval('puts [array get tcl_platform]')
ist die einzige mir bekannte Integration, die offensichtlich sehr begrenzt ist (ganz zu schweigen von der Tatsache, dass sie den X11-Server auf dem Mac startet).