Gelegentlich wäre es vorzuziehen, einen Initialisierungscode für Paletten (von Schaltflächen) zu haben. Zum Beispiel könnte es einige Funktionen definieren, die von Palettenknöpfen verwendet werden.
Was ist der einfachste und vorzuziehende Weg, um Initialisierungscode für eine Palette zu definieren / auszuführen?
CreatePalette
, etc .) Sie haben recht, wenn Sie sich Sorgen machen, dass die Dynamic
ein Problem darstellt. Der Weg, um sicherzustellen, dass ein Dynamic
-Ausdruck unabhängig von der Sichtbarkeit einer der einzelnen Zellen ausgewertet wird, ist die Verwendung von NotebookDynamicExpression
. Hier ist ein Beispiel, das NotebookDynamicExpression
funktioniert zeigt, während ein Dynamic
fehlschlägt, weil es in einer geschlossenen Zellengruppe versteckt ist:
Beachten Sie bei der Auswertung, dass Dynamic
in NotebookDynamicExpression
sofort ausgewertet wird. Das DynamicWrapper
wird niemals ausgewertet, bis Sie die Zellengruppe öffnen, was Sie tun können, indem Sie auf den "Click to open" -Text klicken.
In diesem Beispiel merkt man übrigens, dass ich das NotebookDynamicExpression
mit Refresh
eingepackt habe. Die Funktion Refresh[#, None]&
stellt sicher, dass der Code nur einmal ausgewertet wird - wenn das Notebook zum ersten Mal geöffnet wird. Andernfalls würde der Code den Standardeigenschaften von Dynamic
entsprechen und immer dann ausgewertet, wenn sich eine der Abhängigkeiten ändert.
NotebookDynamicExpression
gibt es seit v6, wurde aber nur in v8 dokumentiert. Ebenfalls dokumentiert sind die verwandten Cousins, CellDynamicExpression
und FrontEndDynamicExpression
.
A DynamicBox
mit Initialization
kann die Grundfunktion erfüllen. Sie können die Palette so skalieren, dass das Objekt nicht sichtbar ist und weiterhin funktioniert.
Hier ist Code für eine kleine Beispielpalette. Es legt einen Wert für var
fest. Der aktive Code wird mit Leerzeichen versetzt.
Tags und Links wolfram-mathematica initialization mathematica-frontend