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

Mathematica graphics


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

before-clicking

After clicking

after-clicking