Ruby/Tkでボタンメニューを出す

Threadを使って、ボタン押下時に与えられたブロックを実行させてるのだけど、美しくない。もう少しエレガントな方法はないものか。

  def select_tk(&block)
    require 'tk'
    ret = -1
    pt = Thread.current # 
    ct = Thread.new do
      b = Array.new(@menu.size)
      Tk.root.bind 'F1', proc {$f1=!$f1;Tk.root.title=$f1?'F1':'nonF1'} 
      # ↑F1キーを押されたら変数$f1をトグルで変更する様にしてやる(仮)
      @menu.size.times do |i|
        b[i] = TkButton.new(nil, 'text'=>(" "+@menu[i]), 
                            'command'=>proc{
                              ret=i;pt.run;b[i].text="#"+@menu[i]
                          })
#        b[i].grid('row'=>i,'sticky'=>'we') # ボタンを左右一杯に拡げる 
        b[i].grid('row'=>i,'sticky'=>'w') # ボタンは左寄せ 
      end
      Tk.mainloop
      exit
    end
    while true
      Thread.stop
      if block
        block.call(ret)
      else
        break
      end
    end
    ret
  end