Вы можете встроить Button
вместо использования отдельной функции test[]
.В противном случае в последнем примере Manipulate[content,Evaluate[test[]]]
, показывает кнопку на моем компьютере в Mathematica 8. Не должно быть никакой разницы между платформами (Windows или Mac).
Если вы делаетечто-то достаточно отличное от того, что Manipulate
предоставляет по умолчанию, может оказаться более удобным построить его с нуля, используя Dynamic
(это я обычно делаю).
Вот пример того, какчтобы включить некоторые кнопки в качестве контроллеров.
Сначала настройте что-то для отображения внутри Manipulate
:
rotate90[{x_, y_}] := {-y, x}
koch[p1_, p2_, n_] := {koch[p1, p1 + (p2 - p1)/3, n - 1],
koch[p1 + (p2 - p1)/3, (p1 + p2)/2 + Sqrt[3]/6 rotate90[p2 - p1],
n - 1], koch[(p1 + p2)/2 + Sqrt[3]/6 rotate90[p2 - p1],
p2 - (p2 - p1)/3, n - 1], koch[p2 - (p2 - p1)/3, p2, n - 1]}
koch[p1_, p2_, 0] := Line[{p1, p2}]
snowflake[n_] :=
Graphics[{koch[{0, 0}, {1, 0}, n],
koch[{1, 0}, {1/2, -Sqrt[3]/2}, n],
koch[{1/2, -Sqrt[3]/2}, {0, 0}, n]}]
Затем настройте сам Manipulate
:
Manipulate[snowflake[n], {{n, 2}, ControlType -> None},
Style["A Koch snowflake", Bold], Delimiter,
Row[{Button["+", n++], Button["-", n = Max[n - 1, 0]]}]]

Вот пример, показывающий, что это работает, даже если Button
определен в отдельной функции:
SetAttributes[paletteButton, HoldRest]
paletteButton[name_, func_] :=
Button[name, func, Appearance -> "Palette"]
Manipulate[snowflake[n], {{n, 2}, ControlType -> None},
Style["A Koch snowflake", Bold], Delimiter,
Evaluate@paletteButton["+", n++]]
Как вы упоминали в своем вопросездесь необходимо обернуть функцию в Evaluate
для получения встроенного Button
.В противном случае Manipulate
не сможет заметить, что у нас есть элемент управления , а не переменная .