中村 のりつぐ です。

Ruby/Tk Canvas チェック中です。

TkCanvas で 複数の tagOrId を引数に取る
TkCanvas#delete が bug っているようです。

  def delete(*args)
    tk_send 'delete', *args
  end
となっているのですが、tagid() をかましてから
渡さなくてはいけないみたいです。

マニュアルを見ると TkCanvas#bbox も 複数の tagOrId を
引数に取るようで、まだ試していないですが、これも
まずい可能性大です。今はこう↓なっています
  def bbox(tagOrId, *tags)
    list(tk_send('bbox', tagid(tagOrId), *tags))
  end

とりあえず、こう↓してみました

#!/usr/bin/env ruby

require "tk"

class TkCanvas
  def delete(*args)
    args.each{|tag| tk_send 'delete', tagid(tag)}
  end
end

c1 = TkCanvas.new {
  width 200
  height 200
  pack
}

oval = TkcOval.new(c1, 10, 10, 20, 20) {
  fill 'blue'
}

TkButton.new {
  text 'c1.delete(oval)'
  command proc { c1.delete(oval) }
  pack('fill' => 'x')
}

Tk.mainloop

       中村 典嗣  E-mail:     nnakamur / mxq.mesh.ne.jp