Can Button[] generate output without using Print[]?
You could try something like:
y = 0;
b1 = Button["Evaluate", y = Cos[Pi/6] (++y), Method -> "Queued"]
Dynamic@y
Sometimes Dynamic is not really needed. In Version 9 you can use the nice new Cells[] construct. So the button could look like
CellPrint@ExpressionCell[Button["Evaluate",
NotebookDelete[Cells[CellTags -> "calculationbutton"]];
CellPrint@ExpressionCell[Cos[Pi/6],
"Output", CellTags -> "calculationbutton"], Method -> "Queued"],
"Text"]
And I would also just close the instruction cell to hide it, e.g.:
Cell[CellGroupData[{Cell[BoxData[
RowBox[{"CellPrint", "@",
RowBox[{"ExpressionCell", "[",
RowBox[{
RowBox[{"Button", "[",
RowBox[{"\"\<Evaluate\>\"", ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"NotebookDelete", "[",
RowBox[{"Cells", "[",
RowBox[{"CellTags", "->", "\"\<calculationbutton\>\""}],
"]"}], "]"}], ";", "\[IndentingNewLine]",
RowBox[{"CellPrint", "@",
RowBox[{"ExpressionCell", "[",
RowBox[{
RowBox[{"Cos", "[",
RowBox[{"Pi", "/", "6"}], "]"}], ",",
"\[IndentingNewLine]", "\"\<Output\>\"", ",",
RowBox[{
"CellTags", "\[Rule]", "\"\<calculationbutton\>\""}]}],
"]"}]}]}], ",",
RowBox[{"Method", "\[Rule]", "\"\<Queued\>\""}]}], "]"}], ",",
"\"\<Text\>\""}], "]"}]}]], "Input",
CellGroupingRules->{GroupTogetherGrouping, 10000.}],
Cell[BoxData[
ButtonBox["\<\"Evaluate\"\>",
Appearance->Automatic,
ButtonFunction:>(NotebookDelete[
Cells[CellTags -> "calculationbutton"]]; CellPrint[
ExpressionCell[
Cos[Pi/6], "Output", CellTags -> "calculationbutton"]]),
Evaluator->Automatic,
Method->"Queued"]], "Text",
CellGroupingRules->{GroupTogetherGrouping, 10000.},
GeneratedCell->True,
CellAutoOverwrite->True]
}, {2}]]
Another approach is to make the button disable itself.
DynamicModule[{enabled = True},
Dynamic@Button["Evaluate", enabled = False; Print[Cos[Pi/6]],
Method -> "Queued", Enabled -> enabled]]
Before clicking on the button
After clicking