Ruby-tk-canvas

提供:Dev Guides
移動先:案内検索

Ruby/TK-キャンバスウィジェット

説明

*Canvas* ウィジェットは、構造化グラフィックを実装します。 キャンバスには、長方形、円、線、テキストなどのアイテムがいくつでも表示されます。

バインドメソッドでコールバックをウィジェットにバインドできるのとほぼ同じ方法で、アイテムを操作(移動または色変更など)し、コールバックをアイテムに関連付けることができます。

構文

このウィジェットを作成する簡単な構文は次のとおりです-

TkCanvas.new {
   .....Standard Options....
   .....Widget-specific Options....
}

標準オプション

  • バックグラウンド
  • ボーダー幅
  • カーソル
  • ハイライト
  • ハイライトカラー
  • ハイライト
  • 安心
  • selectbackground
  • selectborderwidth
  • selectforeground
  • 状態
  • フォーカス
  • tile
  • xscrollcommand *yscrollcommand

これらのオプションは前の章で説明されています。

ウィジェット固有のオプション

Sr.No. Options & Description
1
  • closeenough *⇒Integer

アイテムの内部にあると見なされる前に、アイテムにマウスカーソルがどれだけ接近している必要があるかを示す浮動小数点値を指定します。 デフォルトは1.0です。

2
  • confine *⇒Boolean

_scrollregion_引数で定義された領域の外側にキャンバスのビューを設定できるかどうかを示すブール値を指定します。 デフォルトはtrueです。つまり、ビューはスクロール領域内に制限されます。

3
  • height *⇒Integer

キャンバスウィジェットがジオメトリマネージャーに要求するウィンドウの高さを指定します。

4
  • scrollregion *⇒Coordinates

長方形領域の左、上、右、下の座標を記述する4つの座標を持つリストを指定します。 この領域はスクロール目的に使用され、キャンバス内の情報の境界と見なされます。

5
  • state* ⇒String

状態が* normal、disabled、、または *hidden のいずれかに設定されるキャンバスのデフォルトの状態を変更します。 個々のキャンバスオブジェクトにはすべて、独自の状態オプションがあり、デフォルトの状態をオーバーライドします。

6
  • width *⇒Integer

キャンバスウィジェットがジオメトリマネージャーに要求するウィンドウ幅を指定します。

7
  • xscrollincrement *⇒Integer

画面距離に許可される通常の形式のいずれかで、水平スクロールの増分を指定します。 このオプションの値がゼロより大きい場合、ウィンドウの左端のキャンバスのx座標が常にxscrollincrementの偶数倍になるように、ウィンドウの水平ビューが制限されます。さらに、スクロールの単位もxscrollincrementになります。

8
  • yscrollincrement* ⇒Integer

画面距離に許可される通常の形式のいずれかで、垂直スクロールの増分を指定します。 このオプションの値が0より大きい場合、ウィンドウの垂直方向のビューは、ウィンドウの上端のキャンバスy座標が常にyscrollincrementの偶数倍になるように制限されます。さらに、スクロールの単位もyscrollincrementになります。

指標

インデックスは、テキストの挿入、文字の範囲の削除、挿入カーソル位置の設定などの方法に使用されます。 インデックスはさまざまな方法で指定できます。また、さまざまな種類のアイテムが、インデックスを指定するためのさまざまな形式をサポートする場合があります。

テキスト項目は、インデックスの次のフォームをサポートしています-

  • number -テキスト項目内の目的の文字の位置を示す10進数。 0は最初の文字を参照し、1は次の文字を参照します。
  • end -アイテムの最後の文字または座標の直後の文字または座標を指します(アイテムの文字または座標の数と同じです)。
  • 挿入-このアイテムに挿入カーソルが描画される直前の文字を指します。 ラインとポリゴンには無効です。

アイテムを作成する

新しいキャンバスウィジェットを作成すると、基本的には何も表示されない大きな長方形になります。言い換えれば、真に空白のキャンバスです。 何か便利なことをするには、アイテムを追加する必要があります。

追加できるアイテムにはさまざまな種類があります。 次のメソッドは、キャンバス内に異なるアイテムを作成するために使用されます-

アークアイテム

タイプarcのアイテムは、ディスプレイ上に円弧状の領域として表示されます。 円弧は、2つの角度で区切られた楕円のセクションです。 アークは、次の形式のメソッドで作成されます-

  • TkcArc.new(canvas、x1、y1、x2、y2、?option、value、option、value、…​?)*メソッドは、アークの作成に使用されます。

引数x1、y1、x2、およびy2は、弧を定義する楕円を囲む長方形領域の2つの対角線上にある角の座標を提供します。 ここに他のオプションの説明があります-

  • extent ⇒ degrees -円弧が占める角度範囲のサイズを指定します。 360より大きいまたは-360より小さい場合、360を法とする度数が範囲として使用されます。
  • fill ⇒ color -弧の領域を色で塗りつぶします。
  • outline ⇒ color -Colorは、円弧のアウトラインの描画に使用する色を指定します。
  • 開始⇒度-弧が占める角度範囲の開始を指定します。
  • style ⇒ type -弧を描く方法を指定します。 _type_が pieslice (デフォルト)の場合、円弧の領域は、楕円の周囲のセクションと、楕円の中心と周囲のセクションの各端の間にある2つのラインセグメントによって定義されます。 _type_が chord の場合、円弧の領域は、楕円の周囲のセクションに加えて、周囲のセクションの2つの端点を結ぶ単一の線分によって定義されます。 _type_が arc の場合、アークの領域は境界線のセクションのみで構成されます。
  • tags ⇒ tagList -アイテムに適用するタグのセットを指定します。 TagListは、アイテムの既存のタグを置き換えるタグ名のリストで構成されます。 TagListは空のリストである場合があります。
  • width ⇒ outlineWidth -弧の領域の周りに描かれるアウトラインの幅を指定します。

ビットマップアイテム

ビットマップタイプのアイテムは、前景と背景の2色の画像としてディスプレイに表示されます。 ビットマップは、次の形式のメソッドで作成されます-

  • TkcBitmap.new(canvas、x、y、?option、value、option、value、…​?)*メソッドは、ビットマップを作成するために使用されます。

引数xおよびyは、ディスプレイ上でビットマップを配置するために使用されるポイントの座標を指定します。 ここに他のオプションの説明があります-

  • anchor ⇒ anchorPos -AnchorPosは、アイテムの配置ポイントに相対的なビットマップの配置方法を示します。 たとえば、anchorPosがcenterの場合、ビットマップはポイントの中央に配置されます。 anchorPosがnの場合、ビットマップは最上部の中心点が位置決め点にあるように描画されます。 このオプションのデフォルトは中央です。
  • background ⇒ color -値が0の各ビットマップピクセルに使用する色を指定します。
  • bitmap ⇒ bitmap -アイテムに表示するビットマップを指定します。
  • foreground ⇒ color -値が1のビットマップピクセルのそれぞれに使用する色を指定します。
  • tags ⇒ tagList -アイテムに適用するタグのセットを指定します。 TagListは、アイテムの既存のタグを置き換えるタグ名のリストで構成されます。 TagListは空のリストである場合があります。

画像アイテム

画像タイプのアイテムは、キャンバスに画像を表示するために使用されます。 画像は、次の形式のメソッドで作成されます。

  • TkcImage.new(canvas、x、y、?option、value、option、value、…​?)*メソッドを使用して画像を作成します。

引数xおよびyは、ディスプレイ上で画像を配置するために使用される点の座標を指定します。 ここに他のオプションの説明があります-

  • anchor ⇒ anchorPos -AnchorPosは、アイテムの配置ポイントに相対的なビットマップの配置方法を示します。 たとえば、anchorPosがcenterの場合、ビットマップはポイントの中央に配置されます。 anchorPosがnの場合、ビットマップは最上部の中心点が位置決め点にあるように描画されます。 このオプションのデフォルトは中央です。
  • image ⇒ name -アイテムに表示する画像の名前を指定します。 このイメージは、image createコマンドで事前に作成されている必要があります。
  • tags ⇒ tagList -アイテムに適用するタグのセットを指定します。 TagListは、アイテムの既存のタグを置き換えるタグ名のリストで構成されます。 TagListは空のリストである場合があります。

ラインアイテム

線種の項目は、1つ以上の接続された線分または曲線としてディスプレイに表示されます。 行は、次の形式のメソッドで作成されます-

  • TkcLine.new(canvas、x1、y1 …​、xn、yn、?option、value、…​?)*メソッドを使用してラインを作成します。

引数x1からynは、接続された一連の線分を記述する一連の2つ以上のポイントの座標を示します。 ここに他のオプションの説明があります-

  • arrow ⇒ where -矢印の先端を線の一端または両端に描画するかどうかを示します。 _Where_の値は、 none (矢印のない場合)、 first (行の最初のポイントの矢印の場合)、 last (行の最後のポイントの矢印の場合)、または both (両端の矢印用)。 このオプションのデフォルトは none です。
  • arrowshape ⇒ shape -このオプションは、矢印の描き方を示します。 このオプションが指定されていない場合、Tkは適切な形状を選択します。
  • dash ⇒ pattern -線を描くパターンを指定します。
  • capstyle ⇒ style -線の端点にキャップを描画する方法を指定します。 可能な値は、butt、projecting、またはroundです。
  • fill ⇒ color -Colorは、線の描画に使用する色を指定します。
  • joinstyle ⇒ style -線の頂点にジョイントを描画する方法を指定します。 可能な値は、ベベル、マイター、またはラウンドです。
  • smooth ⇒ boolean -線を曲線として描画するかどうかを示します。
  • splinesteps ⇒ number -曲線に必要な滑らかさの程度を指定します。各スプラインは、数値の線分で近似されます。 _smooth_オプションがtrueでない限り、このオプションは無視されます。
  • stipple ⇒ bitmap -線が点描パターンで塗りつぶされることを示します。ビットマップは、使用する点描パターンを指定します。
  • tags ⇒ tagList -アイテムに適用するタグのセットを指定します。 TagListは、アイテムの既存のタグを置き換えるタグ名のリストで構成されます。 TagListは空のリストである場合があります。
  • width ⇒ lineWidth -線の幅を指定します。

長方形のアイテム

タイプが長方形のアイテムは、ディスプレイ上に長方形の領域として表示されます。 各長方形には、アウトライン、塗りつぶし、またはその両方があります。 長方形は、次の形式のメソッドで作成されます-

  • TkcRectangle.new(canvas、x1、y1、x2、y2、?option、value、…​?)*メソッドを使用してRectangleを作成します。

引数x1、y1、x2、およびy2は、長方形の対角線上にある2つのコーナーの座標を示します。 ここに他のオプションの説明があります-

  • fill ⇒ color -長方形の領域を色で塗りつぶします。
  • outline ⇒ color -カラーで長方形のエッジの周りにアウトラインを描画します。
  • stipple ⇒ bitmap -長方形を点描パターンで塗りつぶすことを示します。ビットマップは、使用する点描パターンを指定します。
  • tags ⇒ tagList -アイテムに適用するタグのセットを指定します。 TagListは、アイテムの既存のタグを置き換えるタグ名のリストで構成されます。 TagListは空のリストである場合があります。
  • width ⇒ outlineWidth -長方形の周りに描かれるアウトラインの幅を指定します。

イベントバインディング

Canvasには、必要に応じてスクロールを許可するデフォルトのバインディングがあります:<Up>、<Down>、<Left>、および<Right>(およびそれらの<Control-*>カウンターパーツ)。 さらに<Prior>、<Next>、<Home>、および<End>。 これらのバインディングにより、スクロール可能な他のウィジェットと同じ方法でナビゲートできます。

例1

require "tk"

canvas = TkCanvas.new
TkcRectangle.new(canvas, '1c', '2c', '3c', '3c', 'outline' => 'black', 'fill' => 'blue')
TkcLine.new(canvas, 0, 0, 100, 100, 'width' => '2', 'fill' => 'red')
canvas.pack

Tk.mainloop

これは、次の結果を生成します-

Ruby/Tk canvas

例2

require 'tk'

root = TkRoot.new
root.title = "Window"

canvas = TkCanvas.new(root) do
   place('height' => 170, 'width' => 100, 'x' => 10, 'y' => 10)
end

TkcLine.new(canvas, 0, 5, 100, 5)
TkcLine.new(canvas, 0, 15, 100, 15, 'width' => 2)
TkcLine.new(canvas, 0, 25, 100, 25, 'width' => 3)
TkcLine.new(canvas, 0, 35, 100, 35, 'width' => 4)
TkcLine.new(canvas, 0, 55, 100, 55, 'width' => 3, 'dash' => ".")
TkcLine.new(canvas, 0, 65, 100, 65, 'width' => 3, 'dash' => "-")
TkcLine.new(canvas, 0, 75, 100, 75, 'width' => 3, 'dash' => "-.")
TkcLine.new(canvas, 0, 85, 100, 85, 'width' => 3, 'dash' => "-..")
TkcLine.new(canvas, 0, 105, 100, 105, 'width' => 2, 'arrow' => "first")
TkcLine.new(canvas, 0, 115, 100, 115, 'width' => 2, 'arrow' => "last")
TkcLine.new(canvas, 0, 125, 100, 125, 'width' => 2, 'arrow' => "both")
TkcLine.new(canvas, 10, 145, 90, 145, 'width' => 15, 'capstyle' => "round")
Tk.mainloop

これは、次の結果を生成します-

Ruby/Tk canvas

実施例3

require 'tk'

root = TkRoot.new
root.title = "Window"

canvas = TkCanvas.new(root) do
   place('height' => 170, 'width' => 100, 'x' => 10, 'y' => 10)
end

TkcRectangle.new(canvas, 10,  5,    55,  50, 'width' => 1)
TkcRectangle.new(canvas, 10,  65,  55, 110, 'width' => 5)
TkcRectangle.new(canvas, 10,  125, 55, 170, 'width' => 1, 'fill'  => "red")

Tk.mainloop

これは、次の結果を生成します-

Ruby/Tk canvas

実施例4

require 'tk'

root = TkRoot.new
root.title = "Window"

canvas = TkCanvas.new(root) do
   place('height' => 170, 'width' => 100, 'x' => 10, 'y' => 10)
end

TkcLine.new(canvas, 0,  10, 100,  10, 'width' => 10, 'fill' => "blue")
TkcLine.new(canvas, 0,  30, 100,  30, 'width' => 10, 'fill' => "red")
TkcLine.new(canvas, 0,  50, 100,  50, 'width' => 10, 'fill' => "green")
TkcLine.new(canvas, 0,  70, 100,  70, 'width' => 10, 'fill' => "violet")
TkcLine.new(canvas, 0,  90, 100,  90, 'width' => 10, 'fill' => "yellow")
TkcLine.new(canvas, 0, 110, 100, 110, 'width' => 10, 'fill' => "pink")
TkcLine.new(canvas, 0, 130, 100, 130, 'width' => 10, 'fill' => "orange")
TkcLine.new(canvas, 0, 150, 100, 150, 'width' => 10, 'fill' => "grey")
Tk.mainloop

これは、次の結果を生成します-

Ruby/Tk canvas